我在antlr中有这个规则:
anREs : anRE
| ('(' anREs ')') => '(' anREs ')'
| (anREs '|' anREs) => anREs '|' anREs ;
其中anRE是正则表达式,当我想编译规则文件时,由于最后一条规则中的第三种选择,我有此错误消息:
错误(210):以下几组 规则是相互左递归的 [anREs]
我怎么能写这条规则?
感谢
答案 0 :(得分:2)
这是你的左递归:
... | (anREs '|' anREs) => anREs '|' anREs ;
更糟糕的是,它含糊不清。如果你有一个REs_1 | anREs_2 | anREs3作为输入,
目前尚不清楚|的子项是什么运营商是。
我希望这可以解决问题,并解决模糊性问题:
... | (anRE '|' anREs) => anRE '|' anREs ;