/* Parses arguments * '(' expressionList ')' | table | String */ Arguments Arguments() { switch (lexer.Current.Symbol) { case Symbol.LeftParen: if (lexer.Current.Line != lexer.Last.Line) { throw new LuaSyntaxException(input, ExceptionMessage.AMBIGUOUS_SYNTAX_FUNCTION_CALL); } lexer.Consume(); var arguments = new List <Expression>(); if (lexer.Current.Symbol != Symbol.RightParen) { arguments = ExpressionList(); } lexer.Expect(Symbol.RightParen); return(new Arguments.Normal(arguments)); case Symbol.LeftBrace: return(new Arguments.Table(Table())); case Symbol.String: var str = new Expression.String(lexer.ExpectLexeme(Symbol.String)); return(new Arguments.String(str)); default: throw new LuaSyntaxException(input, ExceptionMessage.UNEXPECTED_SYMBOL, lexer.Current.Symbol); } }
/* Parses arguments * '(' expressionList ')' | table | String */ Arguments Arguments() { switch (lexer.Current.Symbol) { case Symbol.LeftParen: if (lexer.Current.Line != lexer.Last.Line) throw new LuaSyntaxException(input, ExceptionMessage.AMBIGUOUS_SYNTAX_FUNCTION_CALL); lexer.Consume(); var arguments = new List<Expression>(); if (lexer.Current.Symbol != Symbol.RightParen) arguments = ExpressionList(); lexer.Expect(Symbol.RightParen); return new Arguments.Normal(arguments); case Symbol.LeftBrace: return new Arguments.Table(Table()); case Symbol.String: var str = new Expression.String(lexer.ExpectLexeme(Symbol.String)); return new Arguments.String(str); default: throw new LuaSyntaxException(input, ExceptionMessage.UNEXPECTED_SYMBOL, lexer.Current.Symbol); } }