コード例 #1
0
ファイル: AstNodeVisitor.cs プロジェクト: yozian/Stringy
 public virtual object Visit(NullAstNode node)
 {
     return(null);
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public override object Visit(NullAstNode node)
 {
     return(null);
 }