2

で定義される文法 G が与えられると、

A -> Ca
B -> Cb
C -> e|f

この文法は LL(1) ですか?

これを 1 行に圧縮できることは理解していますが、それはこの質問のポイントではありません。

主に、LL(1) 文法には、同じ非終端記号で始まる複数の規則を含めることができますか?

フォローアップの質問として、上記の文法の解析テーブルを作成するにはどうすればよいですか?

私は次のことを解決しました:

FIRST(A) = {e,f}
FIRST(B) = {e,f}
FIRST(C) = {a,b}

FOLLOW(A) = {}
FOLLOW(B) = {}
FOLLOW(C) = {a,b}

この投稿を見ましたが、FIRST と FOLLOW からテーブルに移行する方法がわかりませんでした。

4

2 に答える 2

2

A → Ca と A → Cb という 2 つのプロダクションの間に FIRST/FIRST の競合があるため、指定した文法は LL(1) ではありません。

一般に、同じ非終端記号で始まる同じ非終端記号の複数の生成を持つ文法は、FIRST/FIRST 競合が発生するため、LL(1) にはなりません。LL(1) であるこのプロパティを持つ文法がありますが、それらは本質的に退化したケースです。たとえば、次の文法を考えてみましょう。

あ→えあ

A→Eb

E→ε

ここで、非終端記号 E は空の文字列 ε に展開されるだけなので、実際には存在しません。したがって、2 つのプロダクション間に FIRST/FIRST の競合がないため、上記の文法は LL(1) です。これを確認するために、解析テーブルを次に示します。

     a  b  $
A    Ea Eb -
E    ε  ε  -

お役に立てれば!

于 2014-02-11T21:08:22.350 に答える
1

私は2つのケースであなたの質問を解決しています:

端末が {a,b,e,f} の場合の最初のケース ここに画像の説明を入力

端子が {a,b,f} で e がイプシロンの場合の 2 番目のケース

ここに画像の説明を入力

したがって、複数のエントリはありません。これは LL(1) です。

詳細については、以下の説明と例を参照してください。

ここに画像の説明を入力

ここに画像の説明を入力

よろしくお願いします

于 2014-02-11T19:04:52.520 に答える