Exemplo n.º 1
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.º 2
0
 void Ident(out Node node)
 {
     Expect(1);
     int ltype = (0 == String.Compare(t.val, "return")) ? (int)ProtoCore.PrimitiveType.kTypeReturn : (int)ProtoCore.PrimitiveType.kTypeVar;
     IdentifierNode var = new IdentifierNode()
     {
     // TODO Jun: Move the primitive types into a class table
     Value = t.val,
     Name = t.val,
     type = ltype,
     datatype = (ProtoCore.PrimitiveType)ltype
     };
     node = var;
 }
Exemplo n.º 3
0
 void functioncall(out Node node)
 {
     Expect(1);
     IdentifierNode function = new IdentifierNode() { Value = t.val, Name = t.val };
     NodeList arglist = new NodeList();
     Expect(8);
     if (StartOf(3)) {
     Node argNode;
     expr(out argNode);
     arglist.Add(argNode);
     while (la.kind == 30) {
         Get();
         expr(out argNode);
         arglist.Add(argNode);
     }
     }
     Expect(9);
     FunctionCallNode funcNode = new FunctionCallNode();
     funcNode.Function = function;
     funcNode.FormalArguments = arglist;
     node = funcNode;
 }
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++;
            }
        }