public static Node Parse(Parser parser) { ArgumentsListNode argList = new ArgumentsListNode(); parser.ExpectToken(TokenType.Parentheses, "("); while (!parser.MatchToken(TokenType.Parentheses, ")")) { argList.Children.Add(ExpressionNode.Parse(parser)); if (!parser.AcceptToken(TokenType.Comma)) { break; } } parser.ExpectToken(TokenType.Parentheses, ")"); return(argList); }
private static Node ParseFunctionCall(Parser parser, Node left) { if (parser.MatchToken(TokenType.Parentheses, "(")) { return(ParseFunctionCall(parser, new FunctionCallNode(left, ArgumentsListNode.Parse(parser)))); } else if (parser.MatchToken(TokenType.Dot)) { return(ParseFunctionCall(parser, GetAttributeNode.Parse(left, parser))); } else if (parser.MatchToken(TokenType.Bracket, "[")) { return(ParseFunctionCall(parser, IndexerNode.Parse(left, parser))); } else { return(left); } }