2016-03-24 13 views
2

私は、再帰的降下パーサーで使用される文法には2つのタイプの制限があることを知っています。先読みの文法制限

  1. 文法は文法は、トークンが先読みでより多くを要求してはなりません任意の左再帰的な制作
  2. を持つことはできません。

私は最初のものを理解していますが、2番目の制限で少し失われています。なぜこの制限が必要であり、それがなければ生産も存在するのだろうか?

答えて

2

2番目の制限は、最初のkトークン(単一のトークンに基づいているのではなく)に基づいて、パーサーがどのプロダクションを使用するかを決定することを要求することによって幾分緩和することができます。これにより、文法のこのクラスに対する効率的な(すなわち、線形時間の)解析アルゴリズムが可能になる(Recursive descent parser参照)。

実際にk=1を選択する主な理由は、LL(1)文法のパーサを構築する方が簡単だと思われます。明らかに多くのコンピュータ言語は、LL(1)文法によって生成されるように設計されています。 LL parserを参照してください。

文法はプロダクションS -> A | BA -> a A b | eps成る、パーサは、単一のトークンに基づいて、使用する生産を決定することができないためB -> a B b b | eps非曖昧非LL(1)文法の一例です。 (hereから)

+0

このプロパティを持たないプロダクションの例がありますか?私はそれを視覚化しようとしています... –

+1

プロダクションで構成された文法 'S - > A | B '、' A - > a A b | eps'、およびB-> aBbb | epsは、パーサーが単一のトークンに基づいてどのプロダクションを使用するかを決定することができないので、非あいまいではないLL(1)文法の例である。 ([ここ](http://stackoverflow.com/questions/6855666/finding-a-language-that-is-not-ll1)から取得しました。) – blazs

関連する問題