在我在Antlr中编写语法的过程中,有几次我遇到了左递归,这就是为什么我问自己为什么没有自动删除它的工具。在我做了一些研究之后,我发现了两种处理这个问题的方法--Paul的算法和Robert C. Moore的工作Removing Left Recursion from Context-Free Grammars, 2000
中讨论的左角变换。我注意到Paull的算法是一个非常不切实际的算法,但另一方面左角变换只会将语法规则的数量从O(n)
增加到O(n^2)
,但大部分时间都远低于此该算法非常有效。所以我的问题是:左递归删除是不是故意实现的,而是将责任留给了语法实现者,或者它不被视为一种选择?
答案 0 :(得分:2)
这个答案的两个部分。