Antlr :相互左递归规则
我在antlr中有这条规则:
anREs : anRE
| ('(' anREs ')') => '(' anREs ')'
| (anREs '|' anREs) => anREs '|' anREs ;
其中anRE是正则表达式,当我想编译规则文件时,由于最后一条规则中的第三个替代方案,我收到此错误消息:
错误(210):以下几组 规则是相互左递归的 [一个RE]
我如何重写这条规则?
谢谢
i have this rule in antlr :
anREs : anRE
| ('(' anREs ')') => '(' anREs ')'
| (anREs '|' anREs) => anREs '|' anREs ;
where the anRE is a regular expression , when i want to compile the rules file i have this error message due to 3rd alternative in last rule :
error(210): The following sets of
rules are mutually left-recursive
[anREs]
how i can re write this rule ?
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是你的左递归:
更糟糕的是,它是不明确的。如果您有 REs_1 | anREs_2 | anREs3 作为输入,
目前尚不清楚 | 的子条款是什么运营商是。
我希望这能解决问题,并解决歧义:
Here is your left recursion:
Worse, its ambiguous. If you have anREs_1 | anREs_2 | anREs3 as input,
it isn't clear what the subterms of the | operator are.
I'd expect this to solve the problem, and resolve the ambiguity, too: