繁体   English   中英

如何在以下语法中消除左递归?

[英]How to remove left-recursion in the following grammar?

不幸的是,当规则传递了参数时, ANTLR不可能支持直接左递归。 唯一可行的选择是删除左递归 有没有办法删除以下语法中的左递归?


a[int x]
    : b a[$x] c
    | a[$x - 1] 
    (
          c a[$x - 1]
        | b c
    )
    ;

问题出在第二种选择中,涉及左递归。 任何帮助将不胜感激。

如果没有参数且格式更简单,它将看起来像这样:

a
 : b a c
 | a (c a | b c)
 ;

a的左递归替代项匹配n次时,这仅意味着(ca | bc)将被匹配n次,并在终止bac之前加上bac (第一个替代项)。 这意味着该规则将始终以bac开头,然后出现零个或多个(ca | bc)

a
 : b a c (c a | b c)*
 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM