Beispiel #1
0
 public void Accept(IndexerNode node)
 {
     node.Index.Visit(this);
     node.Target.Visit(this);
     append("pop a");
     append("pop b");
     append("add a, b");
     append("loadb a, a");
     append("push a");
 }
Beispiel #2
0
        public void SimpleTest3()
        {
            string        expr = ExpressionsForTest.Expr3;
            LexicalParser lp   = new LexicalParser();

            lp.SetParseContent(expr);
            List <Token <TokenType> > tokens = lp.Parse();

            SymanticParser sp = new SymanticParser();

            sp.SetParseContent(tokens);
            ExpressionLanguageAST ast = sp.Parse();

            Assert.IsTrue(ast.Root is IndexerNode);
            IndexerNode iNode = ast.Root as IndexerNode;

            Assert.IsTrue(iNode.Variable is SimpleNode);
            Assert.IsTrue((iNode.Args as ParamListNode).Values.Count == 1);
        }
Beispiel #3
0
        private Node Factor()
        {
            Node node           = Obj();
            Token <TokenType> t = PeekNextToken();

            while (!t.End)
            {
                if (t.TokenType == TokenType.Dot)
                {
                    GetNextToken();
                    Token <TokenType> idToken = GetNextToken();
                    if (idToken.TokenType != TokenType.ID)
                    {
                        ExceptionHelper.ThrowExpectToken(TokenType.ID, idToken.Position);
                    }
                    if (PeekNextToken().TokenType == TokenType.Left_Parenthesis)//Note:Method Call
                    {
                        GetNextToken();
                        ParamListNode     method_param_node = ValueList();
                        Token <TokenType> rightToken        = GetNextToken();
                        if (rightToken.TokenType != TokenType.Right_Parenthesis)
                        {
                            ExceptionHelper.ThrowExpectToken(TokenType.Right_Parenthesis, rightToken.Position);
                        }

                        MethodNode methodNode = new MethodNode(node, new SimpleNode(idToken), method_param_node);
                        node = methodNode;

                        t = PeekNextToken();
                        continue;
                    }
                    else//Note:Property
                    {
                        PropertyNode propNode = new PropertyNode(node, new SimpleNode(idToken));
                        node = propNode;
                    }
                }
                else if (t.TokenType == TokenType.Left_Square_Bracket)
                {
                    GetNextToken();
                    ParamListNode     index_param_node = ValueList();
                    Token <TokenType> rightToken       = GetNextToken();
                    if (rightToken.TokenType != TokenType.Right_Square_Bracket)
                    {
                        ExceptionHelper.ThrowExpectToken(TokenType.Right_Square_Bracket, rightToken.Position);
                    }

                    IndexerNode indexerNode = new IndexerNode(node, index_param_node);
                    node = indexerNode;
                }
                else if (t.TokenType == TokenType.Left_Parenthesis)
                {
                    GetNextToken();
                    ParamListNode     static_method_param_node = ValueList();
                    Token <TokenType> rightToken = GetNextToken();
                    if (rightToken.TokenType != TokenType.Right_Parenthesis)
                    {
                        ExceptionHelper.ThrowExpectToken(TokenType.Right_Parenthesis, t.Position);
                    }

                    MethodNode staticMethodNode = new MethodNode(null, node, static_method_param_node);
                    node = staticMethodNode;
                }
                else
                {
                    break;
                }

                t = PeekNextToken();
            }
            return(node);
        }
Beispiel #4
0
 public override void VisitIndexer(IndexerNode node)
 {
     visitor.VisitIndexer((IIndexerWithSymbols)node);
 }