void interimfactor(out Node node) { node = null; factor(out node); while (la.kind == 41 || la.kind == 42 || la.kind == 43) { Operator op; bitop(out op); Node rhsNode; factor(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = node; bNode.RightNode = rhsNode; bNode.Optr = op; node = bNode; } }
void logicalexpr(out Node node) { node = null; RangeExpr(out node); while (StartOf(5)) { Operator op; relop(out op); Node rhsNode = null; RangeExpr(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = node; bNode.RightNode = rhsNode; bNode.Optr = op; node = bNode; } }
void binexpr(out Node node) { node = null; logicalexpr(out node); while (la.kind == 44 || la.kind == 45) { Operator op; logicalop(out op); Node rhsNode = null; expr(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = node; bNode.RightNode = rhsNode; bNode.Optr = op; node = bNode; } }
void assignstmt(out Node node) { node = null; Node lhsNode = null; if (isArrayAccess()) { arrayident(out lhsNode); } else if (la.kind == 1) { Get(); int ltype = (0 == String.Compare(t.val, "return")) ? (int)ProtoCore.PrimitiveType.kTypeReturn : (int)ProtoCore.PrimitiveType.kTypeVar; lhsNode = new ProtoImperative.AST.IdentifierNode() { Value = t.val, type = ltype, datatype = (ProtoCore.PrimitiveType)ltype }; } else SynErr(52); Expect(31); Node rhsNode; if (StartOf(3)) { expr(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = lhsNode; bNode.RightNode = rhsNode; bNode.Optr = Operator.assign; node = bNode; Expect(16); } else if (la.kind == 6) { languageblock(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = lhsNode; bNode.RightNode = rhsNode; bNode.Optr = Operator.assign; node = bNode; } else SynErr(53); }
void ArgDecl(out Node node) { IdentifierNode tNode = null; VarDeclNode varDeclNode = new ProtoImperative.AST.VarDeclNode(); varDeclNode.memregion = ProtoCore.DSASM.MemoryRegion.kMemStack; if (la.kind == 25) { Get(); varDeclNode.memregion = ProtoCore.DSASM.MemoryRegion.kMemHeap; } if (isArrayAccess()) { arrayident(out node); tNode = node as IdentifierNode; varDeclNode.NameNode = tNode; } else if (la.kind == 1) { Get(); tNode = new IdentifierNode() { Value = t.val, Name = t.val, type = (int)ProtoCore.PrimitiveType.kTypeVar, datatype = ProtoCore.PrimitiveType.kTypeVar }; varDeclNode.NameNode = tNode; } else SynErr(68); ProtoCore.Type argtype = new ProtoCore.Type(); argtype.Name = "var"; argtype.rank = 0; argtype.UID = 0; if (la.kind == 36) { Get(); Expect(1); argtype.Name = t.val; if (la.kind == 6) { argtype.IsIndexable = true; Get(); Expect(7); argtype.rank = 1; if (la.kind == 6 || la.kind == 17 || la.kind == 31) { if (la.kind == 17) { Get(); Expect(6); Expect(7); argtype.rank = ProtoCore.DSASM.Constants.nDimensionArrayRank; } else { while (la.kind == 6) { Get(); Expect(7); argtype.rank++; } } } } } varDeclNode.ArgumentType = argtype; if (la.kind == 31) { Get(); Node rhsNode; expr(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = tNode; bNode.RightNode = rhsNode; bNode.Optr = Operator.assign; varDeclNode.NameNode = bNode; } node = varDeclNode; if(!isGlobalScope) { localVarCount++; } }
void term(out Node node) { node = null; interimfactor(out node); while (la.kind == 39 || la.kind == 40) { Operator op; mulop(out op); Node rhsNode; interimfactor(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = node; bNode.RightNode = rhsNode; bNode.Optr = op; node = bNode; } }
void rel(out Node node) { node = null; term(out node); while (la.kind == 38 || la.kind == 46) { Operator op; addop(out op); Node rhsNode; term(out rhsNode); BinaryExpressionNode bNode = new BinaryExpressionNode(); bNode.LeftNode = node; bNode.RightNode = rhsNode; bNode.Optr = op; node = bNode; } }