Parsing 如何删除以下语法中的左递归?
不幸的是,当规则传递了参数时,ANTLR不可能支持直接左递归。唯一可行的选择是删除左递归。在下面的语法中有没有删除左递归的方法Parsing 如何删除以下语法中的左递归?,parsing,antlr,grammar,antlr4,antlrworks,Parsing,Antlr,Grammar,Antlr4,Antlrworks,不幸的是,当规则传递了参数时,ANTLR不可能支持直接左递归。唯一可行的选择是删除左递归。在下面的语法中有没有删除左递归的方法 问题出现在涉及左递归的第二个备选方案中。非常感谢您提供的任何帮助。如果没有参数和更简单的格式设置,它将如下所示: a : b a c | a (c a | b c) ; 当a的左递归备选方案匹配n次时,这意味着(c a | b c)将匹配n次,与终止的b a c(第一个备选方案)一起等待。这意味着此规则将始终以BAC开头,然后是零次或多次出现的(CAC):
问题出现在涉及左递归的第二个备选方案中。非常感谢您提供的任何帮助。如果没有参数和更简单的格式设置,它将如下所示:
a
: b a c
| a (c a | b c)
;
当a
的左递归备选方案匹配n次时,这意味着(c a | b c)
将匹配n次,与终止的b a c
(第一个备选方案)一起等待。这意味着此规则将始终以BAC
开头,然后是零次或多次出现的(CAC)
:
a
: b a c
| a (c a | b c)
;
a
: b a c (c a | b c)*
;