ANTLR在计算不符合语法定义的字符串时未报告错误

ANTLR在计算不符合语法定义的字符串时未报告错误,antlr,antlr3,antlr4,antlrworks,antlrv3ide,Antlr,Antlr3,Antlr4,Antlrworks,Antlrv3ide,这是我第一次在伦敦帝国理工学院与ANTLR合作进行一个项目,到目前为止,这个项目非常有用。我已经定义了一个简单的递归语法,如下所示 grammar Hello; execution: workflow; workflow : Task | workflow OPERATOR workflow |'(' workflow OPERATOR workflow ')' |'(' w

这是我第一次在伦敦帝国理工学院与ANTLR合作进行一个项目,到目前为止,这个项目非常有用。我已经定义了一个简单的递归语法,如下所示

grammar Hello;      

execution: workflow;

workflow : Task 
         | workflow OPERATOR workflow 
         |'(' workflow OPERATOR workflow ')'                        
         |'(' workflow OPERATOR workflow ')' (OPERATOR workflow)*                        
          ;


Task : 'T' ('0'..'9')+ | 'WF' ('0'..'9')+;

OPERATOR: 'AND' | 'OR'  | 'XOR' |';' ;

WS  :   [ \t\n\r]+ -> channel(HIDDEN) ; 
要计算字符串,请执行以下操作:

T6 ; (T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4) AND T5 OR T11
它工作得很好,当我试图计算一个不正确的字符串时,我的问题来了,比如

T6 ; (T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4) AND (T5;OR() T2) 
根据我的规则,最后一个和字符串“(T5;或()T2)”是无效的,因为它不符合我的语法定义,但在测试时,我得到了字符串的树

   T6 ; (T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4)
最后一个不正确的部分“(T5;或()T2)”被忽略

我的问题是我遗漏了什么,我应该怎么做才能得到和说错话 “(T5;或()T2)”不符合我的语法定义,有人知道吗


非常感谢

lexer愉快地标记了您格式错误的输入,您给了解析器解析(有效的)
执行的指令
。这就是它所做的。如果要强制解析器使用整个令牌流,请在语法入口点的末尾放置一个
EOF

执行:工作流EOF;
如果现在分析输入:

String source=“T6;(T4和T7);T5;((WF23或WF2)或(T3和WF4)和T4)和(T5;或()T2)”;
HelloLexer lexer=新的HelloLexer(新的AntlInputStream(源));
HelloParser parser=newhelloparser(newcommontokenstream(lexer));
parser.execution();
您将获得以下输出:

line 1:72 no viable alternative at input '(T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4) AND (T5;OR' line 1:15 extraneous input ')' expecting {, OPERATOR} ... 第1行:输入端(T4和T7)无可行的替代方案;T5;((WF23或WF2)或(T3和WF4)和T4)和(T5);或 第1行:15外部输入“)”应为{,运算符}
…谢谢你快速的回答你救了我一命。真正地现在它工作得很好!!