【问题】
antlr的代码:
startParse : include* (identification)+; include : '#include' ' '+ '"' ID+ '.h"' WS* -> include;
编译出错:
As a result, alternative(s) 2 were disabled for that input |
【解决过程】
1.刚刚发现,原来作为参考的,原先的代码,是这样的:
identification : definiton WS* (','?)! WS* -> definiton ;
其中,是:
A : B … -> B |
的效果,不是:
A:xxxx -> A |
的形式。
所以去改为:
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 ->