Exemplo n.º 1
0
        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;

            }
        }
Exemplo n.º 2
0
        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;

            }
        }
Exemplo n.º 3
0
        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;

            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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++;
            }
        }
Exemplo n.º 6
0
        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;

            }
        }
Exemplo n.º 7
0
        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;

            }
        }