最新消息:20210917 已从crifan.com换到crifan.org

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

ANTLR crifan 1858浏览 0评论

【问题】

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

转载请注明:在路上 » 【已解决】antlr代码编译出错:reference to rewrite element include without reference on left of ->

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.195 seconds, using 20.12MB memory