所以我一直在阅读的内容都表明,CFG中的左递归规则无限地遍历并继续展示将其转换为正确的递归规则的过程,并使用alpha和beta术语来表示多个非终端(我认为我得到了那个部分)。所以在处理LL解析器时,左递归规则=坏。
那么是否存在递归规则可接受/可取的情况?如果不是,为什么左边的递归规则存在,从糟糕的设计或术语出发来描述正确的递归规则的“逆”(术语使用得很轻松)?
这在技术上不是一个家庭作业问题,但它与我的班级有关。
答案 0 :(得分:3)
你的问题的关键是左递归规则在处理LL解析器时只会很糟糕。如果你正在使用LR解析器,我常常觉得语法变得更加清晰。例如,采用标准表达式语法
E : E + T | T
T : T * F | F
F : number | ( E )
这显然是递归的,但比其正确的递归变体更容易阅读。当有问题的解析器处理原始语法没有问题时,将该语法分解为正确递归是没有意义的。
在这种情况下,您还可以获得不需要epsilon规则的语法,相应的LL兼容语法也是如此。