【问题】
antlr的代码:
1 2 3 | startParse : include* (identification)+; include : '#include' ' '+ '"' ID+ '.h"' WS* -> include; |
编译出错:
As a result, alternative(s) 2 were disabled for that input |
【解决过程】
1.刚刚发现,原来作为参考的,原先的代码,是这样的:
1 2 | identification : definiton WS* (','?)! WS* -> definiton ; |
其中,是:
A : B … -> B |
的效果,不是:
A:xxxx -> A |
的形式。
所以去改为:
1 2 3 4 | startParse : include* identification+; includeHeader : '#include' ' '+ '"' ID+ '.h"' ; include : includeHeader WS* -> includeHeader; |
就可以正常编译了,就可以消除错误了。
【总结】
如前所说,antlr中,对于一种定义,映射到另一种,是:
A : B … -> B |
而不是:
A:xxxx -> A |
转载请注明:在路上 » 【已解决】antlr代码编译出错:reference to rewrite element include without reference on left of ->