Antlr で文法を書いている最中に、左再帰に何度か遭遇したことがあります。いくつかの調査を行った後、この問題に対処する 2 つの方法を見つけました。ポールのアルゴリズムと、Robert C. Moore の作品で説明されている左隅の変換Removing Left Recursion from Context-Free Grammars, 2000
です。ポールのアルゴリズムは非常に非現実的なものですが、一方で左隅の変換は文法規則の数を からO(n)
まで増やすだけO(n^2)
ですが、ほとんどの場合、これよりもはるかに少ないため、そのアルゴリズムは非常に効率的です。だから私の質問は次のとおりです:左再帰の削除は意図的に実装されておらず、文法の実装者に責任を負っていますか、それともオプションとは見なされていませんか?