public virtual object Visit(NullAstNode node) { return(null); }
/// <summary> /// factor : PLUS factor /// | MINUS factor /// | INTEGER_CONST /// | REAL_CONST /// | STRING_CONST /// | LPAREN statement RPAREN /// | NOT factor /// | variable_access /// | null /// | true /// | false /// </summary> private AstNode ParseFactor() { AstNode node = null; EatWhiteSpace(); var token = CurrentToken; switch (token.Type) { case TokenType.PLUS: Eat(TokenType.PLUS); node = new UnaryOperationAstNode(token, ParseFactor()); break; case TokenType.MINUS: Eat(TokenType.MINUS); node = new UnaryOperationAstNode(token, ParseFactor()); break; case TokenType.INTEGER_CONST: Eat(TokenType.INTEGER_CONST); node = new TerminalAstNode <int>(token, int.Parse(token.Value)); break; case TokenType.REAL_CONST: Eat(TokenType.REAL_CONST); node = new TerminalAstNode <double>(token, double.Parse(token.Value)); break; case TokenType.TEXT_LITERAL: Eat(TokenType.TEXT_LITERAL); node = new TerminalAstNode <string>(token, token.Value); break; case TokenType.IDENTIFIER: node = ParseVariableAccess(); break; case TokenType.NULL: Eat(TokenType.NULL); node = new NullAstNode(token); break; case TokenType.BOOL_FALSE: Eat(TokenType.BOOL_FALSE); node = new TerminalAstNode <bool>(token, false); break; case TokenType.BOOL_TRUE: Eat(TokenType.BOOL_TRUE); node = new TerminalAstNode <bool>(token, true); break; case TokenType.LPAREN: Eat(TokenType.LPAREN); node = ParseStatement(); Eat(TokenType.RPAREN); break; case TokenType.NOT: Eat(TokenType.NOT); node = ParseFactor(); break; } return(node); }
public override object Visit(NullAstNode node) { return(null); }