Antlr:相互左递归规则

时间:2011-04-22 17:26:00

标签: antlr

我在antlr中有这个规则:

anREs : anRE 
      | ('(' anREs ')') =>  '(' anREs ')'
      | (anREs '|' anREs) =>  anREs '|' anREs   ;

其中anRE是正则表达式,当我想编译规则文件时,由于最后一条规则中的第三种选择,我有此错误消息:

  

错误(210):以下几组   规则是相互左递归的   [anREs]

我怎么能写这条规则?

感谢

1 个答案:

答案 0 :(得分:2)

这是你的左递归:

  ... | (anREs '|' anREs) =>  anREs '|' anREs   ;
更糟糕的是,它含糊不清。如果你有一个REs_1 | anREs_2 | anREs3作为输入, 目前尚不清楚|的子项是什么运营商是。

我希望这可以解决问题,并解决模糊性问题:

  ... | (anRE '|' anREs) =>  anRE '|' anREs   ;