private static AstNode ParseFunctionCall(Parser.Parser parser, AstNode left) { if (parser.AcceptToken(TokenType.Parentheses, "(")) { return(ParseFunctionCall(parser, new FunctionCallNode(left, ArgListNode.Parse(parser)))); } else if (parser.AcceptToken(TokenType.Bracket, "[")) { return(ParseFunctionCall(parser, new ArrayGetNode(left, ArrayIndexerNode.Parse(parser)))); } else { return(left); } }
public static ArgListNode Parse(Parser.Parser parser) { ArgListNode ret = new ArgListNode(); parser.ExpectToken(TokenType.Parentheses, "("); while (!parser.MatchToken(TokenType.Parentheses, ")")) { ret.Children.Add(ExpressionNode.Parse(parser)); if (!parser.AcceptToken(TokenType.Comma)) { break; } } parser.ExpectToken(TokenType.Parentheses, ")"); return ret; }
public static ArgListNode Parse(Parser.Parser parser) { ArgListNode ret = new ArgListNode(); parser.ExpectToken(TokenType.Parentheses, "("); while (!parser.MatchToken(TokenType.Parentheses, ")")) { ret.Children.Add(ExpressionNode.Parse(parser)); if (!parser.AcceptToken(TokenType.Comma)) { break; } } parser.ExpectToken(TokenType.Parentheses, ")"); return(ret); }
public FunctionCallNode(AstNode target, ArgListNode arguments) { this.Children.Add(target); this.Children.Add(arguments); }