这是我第一次在伦敦帝国理工学院与 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)
根据我在最后一个 AND 之后的规则,字符串 "(T5;OR() T2) " 无效,因为它不符合我的语法定义,但是在测试这个时,我得到了字符串的树
T6 ; (T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4)
并且最后一部分“(T5;OR() T2) ”是不正确的,它被简单地忽略了。
我的问题是我错过了什么,我应该怎么做才能得到和错误说“(T5;OR()T2)”不符合我的语法定义,有人知道吗?
非常感谢