Antlr4 使用错误的输入字符串运行TestRig不会发出错误消息

Antlr4 使用错误的输入字符串运行TestRig不会发出错误消息,antlr4,Antlr4,我做了一个语法,它构造了表达式之间的比较,如下所示 grammar EtlExpression; /** The start rule; begin parsing here. */ prog : comp ; comp : expr ('='|'<='|'>='|'<'|'>') expr ; expr : expr ('*'|'/') expr | expr ('+'|'-') expr | '(' expr

我做了一个语法,它构造了表达式之间的比较,如下所示

grammar EtlExpression;

/** The start rule; begin parsing here. */
prog   : comp ; 

comp   : expr ('='|'<='|'>='|'<'|'>') expr ;

expr   : expr ('*'|'/') expr   
       | expr ('+'|'-') expr   
       | '(' expr ')'         
       | func
       | ID                    
       | STR                    
       | NUM    
       ;

func   : ID '(' expr (',' expr)* ')' ;    // function 

STR    : '"' ('\\"'|.)*? '"' ;                       // match identifiers 
ID     : LETTER (LETTER|DIGIT)* ;                    // match identifiers 
NUM    : '-'? ('.' DIGIT+ | DIGIT+ ('.' DIGIT*)? ) ; // match number
WS     : [ \t\r\n]+ -> skip ;                        // toss out whitespace

fragment
LETTER : [a-zA-Z] ;
fragment
DIGIT  : [0-9] ;
语法表达;
/**启动规则;从这里开始解析*/
程序:comp;
comp:expr(“=”|“=”|“)expr;
expr:expr(“*”|“/”)expr
|expr('+'|'-')expr
|“('expr')”
|func
|身份证
|STR
|NUM
;
func:ID'('expr(','expr)*');//作用
STR:“”(“\\”“\;)*?”“;//匹配标识符
ID:字母(字母|数字)*;//匹配标识符
NUM:'-'?('.'数字+|数字+('.'数字*)?);//匹配号
WS:[\t\r\n]+->skip;//去掉空格
片段
信:[a-zA-Z];
片段
数字:[0-9];
然后我在编译之后运行testRig。 结果如下

java -cp .;C:\App\Antlr4\antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig test.antlr.EtlExpression prog -tree
a < b = c
^Z
(prog (comp (expr a) < (expr b)))
java-cp;C:\App\Antlr4\antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig test.antlr.etl表达式程序树
a
comp规则只指定一个比较操作数,我认为这个测试输入字符串应该发出某种错误,比如“第1:6行:'='处的令牌识别错误”,但它只是忽略了“=c”部分

你能帮我语法有什么问题吗?或者我怎样才能得到正确的信息?
提前感谢。

当解析器无法匹配
=
及其以外的内容时,解析器将停止运行。如果您强制解析器使用整个输入,则标准输出上将出现错误。您可以通过将
EOF
添加到
程序
规则:

prog : comp EOF;