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"); }
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); }
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); }
public override void VisitIndexer(IndexerNode node) { visitor.VisitIndexer((IIndexerWithSymbols)node); }