private AST Group2() { var ast = Group1(); if (CurrentToken.TokenType == TokenType.Function) { if (ast != null) { ThrowUnexpectedTokenTypeException(); } switch (CurrentToken.Value) { case "ToString": ast = new ToStringFunction(CurrentToken); break; case "DateTime.Now": ast = new DateTimeFunction(CurrentToken); break; case "string.Concat": ast = new StringConcatFunction(CurrentToken); break; case "AddMonths": ast = new AddMonths(CurrentToken); break; default: ThrowUnexpectedTokenTypeException(); break; } CurrentToken = _lexer.GetNextToken(); if (CurrentToken.TokenType != TokenType.OpenParenthesis) { ThrowUnexpectedTokenTypeException(); } CurrentToken = _lexer.GetNextToken(); while (CurrentToken.TokenType != TokenType.CloseParenthesis) { ast.ChildNodes.Add(Group10()); if (CurrentToken.TokenType == TokenType.Separator) { CurrentToken = _lexer.GetNextToken(); } } CurrentToken = _lexer.GetNextToken(); } return(ast); }
private AST Group10() { var ast = Group6(); if (ast == null) { ThrowUnexpectedTokenTypeException(); } while (CurrentToken.TokenType == TokenType.StringConcat) { var token = CurrentToken; CurrentToken = _lexer.GetNextToken(); ast = new StringConcatFunction(ast, token, Group6()); } return(ast); }