ANTLR:为什么无效输入可以匹配语法定义

时间:2012-12-17 09:01:16

标签: antlr antlr3

我为计算表达式编写了一个非常简单的语法定义:

grammar SimpleCalc;

options {
    output=AST;
}

tokens {
    PLUS  = '+' ;
    MINUS = '-' ;
    MULT = '*' ;
    DIV = '/' ;
}

/*------------------------------------------------------------------
 * LEXER RULES
 *------------------------------------------------------------------*/

ID  : ('a'..'z' | 'A' .. 'Z' | '0' .. '9')+ ;

WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+    { Skip(); } ;

/*------------------------------------------------------------------
 * PARSER RULES
 *------------------------------------------------------------------*/

start: expr EOF;

expr : multExpr ((PLUS | MINUS)^ multExpr)*;

multExpr : atom ((MULT | DIV)^ atom )*;

atom : ID
     | '(' expr ')' -> expr;

我已经通过ABC &* DEF尝试了无效的表达式start,但它已通过了。看起来&字符被忽略了。这有什么问题?

1 个答案:

答案 0 :(得分:1)

实际上你的无效表达式ABC &= DEF尚未通过;它导致NoViableAltException

enter image description here