ANTLR在计算不符合语法定义的字符串时未报告错误
这是我第一次在伦敦帝国理工学院与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
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外部输入“)”应为{,运算符}
…谢谢你快速的回答你救了我一命。真正地现在它工作得很好!!