【已解决】antlr代码编译出错:reference to rewrite element include without reference on left of ->

【问题】

antlr的代码:

startParse	:	include* (identification)+;

include	:	'#include' ' '+ '"' ID+ '.h"' WS*   -> include;

编译出错:

As a result, alternative(s) 2 were disabled for that input

[15:15:58] error(136): D:\DevRoot\IndustrialMobileAutomation\HandheldDataSetter\ANTLR\projects\v1.5\DDParserDemo\DDParserDemo.g:94:50: reference to rewrite element include without reference on left of ->

【解决过程】

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


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量