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


12

これはドラゴンブックからの質問です。これは文法です:

S→AaAb∣BbBa
A→ε
B→ε

質問では、それがLL(1)であってSLR(1)ではないことをどのように示すかを尋ねます。

それがLL(1)であることを証明するために、構文解析テーブルを作成してみましたが、セル内で複数のプロダクションを取得していますが、これは矛盾しています。

このLL(1)の状態と、それを証明する方法を教えてください。


6
私は文法にあまり慣れていませんが、この文法の言語は有限であるようです。L={ab,ba}
— Nejc 2012年

@Nejc:はい、そうです!
— Vinayak Garg

回答:


11

まず、作品に番号を付けましょう。

1 2 S → B B B 3 A → ε 4 B → εS→AaAb
S→BbBa
A→ε
B→ε

最初のセットを計算し、最初にセットを追跡しましょう。これらのような小さな例では、これらのセットについて直感を使用するだけで十分です。

FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}

次に、テーブルを計算します。定義により、衝突が発生しない場合、文法はL L (1 )です。LL(1)LL(1)

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

競合がないため、文法はです。LL(1)

今の表。まず、L R (0 )オートマトン。SLR(1)LR(0)

state 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙

SLR(1)S

    a     | b     | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2    |       |   |   |
2 | R3    | R3    | 3 |   |
3 |       | S4    |   |   |
4 | R1    | R1    |   |   |
5 |       | S4    |   |   |
6 | R4    | R4    |   | 7 |
7 | S8    |       |   |   |
8 | R2    | R2    |   |   |

SLR(1)LALR(1)a LALR(1)b

LL(1)LALR(1)


ありがとう!First&Followは正しく作成しましたが、テーブルの作成を間違えました。
— Vinayak Garg

10

質問されない場合は、LL(1)文法であることを証明するためにLL(1)テーブルを作成する必要はありません。Alexが行ったように、FIRST / FOLLOWセットを計算するだけです。

FIRST⁡(S)=a,bFIRST⁡(A)=εFIRST⁡(B)=εFOLLOW⁡(A)=a,bFOLLOW⁡(B)=a,b

そして、定義により、LL(1)文法は次のようにする必要があります。

  1. 場合及び文法の二つの異なるルールであり、それはすべきであることを。したがって、2つのセットには共通の要素がありません。A⇒aA⇒bFIRST⁡(a)∩FIRST⁡(b)=∅
  2. 記号に対して場合、それはでなければなりません。したがって、非終端記号の生成がゼロの場合、FIRSTおよびFOLLOWセットは共通の要素を持つことができません。AΑ⇒∗εFIRST⁡(A)∩FOLLOW⁡(A)=∅

したがって、指定された文法について:

  1. 我々はのでながらと共通の要素はありません。FIRST⁡(AaAb)∩FIRST⁡(BbBa)=∅FIRST⁡(AaAb)={a}FIRST⁡(BbBa)={b}
  2. FIRST⁡(A)∩FOLLOW⁡A)=∅ since while、そして今、 since while。FIRST⁡(A)={a,b}FOLLOW⁡(A)=∅FIRST⁡(B)∩FOLLOW⁡(B)=∅FIRST⁡(B)={ε}FOLLOW⁡(B)={a,b}

SLR(1)の分析は完璧だと思います!


ようこそ!この答えを改善するために、あなたが述べていることを手元の文法に適用してみませんか?
— ラファエル

ここにいて幸せです!! あなたのリクエストに答えて、私は完全に説明したと思います!
— イーサン

ありがとう!ここではLaTeXを使用できることに注意してください。これは、計算のために編集したものです。
— ラファエル

わぁありがとう!これは素晴らしい説明です。でも応募には間違いがあると思います。First(A)= {epsilon}ではないですか?FIRSTとFOLLOWを入れ替えたと思います。
— Vinayak Garg

FIRST(A)は確かにイプシロンですが、正しいメンバー全体の最初のセットを計算しようとしているため、A->εは、空のプロダクションがあり、最初に表示される終端記号(したがって最初のセット)が端子記号a。これが役に立てば幸い!
— イーサン

0

文法LL(1)になる十分な条件を検索します(ヒント:最初のセットを確認してください)。

すべてのSLR(1)文法が満たす必要がある必要な条件を検索します(ヒント:FOLLOWセットを見てください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.