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


12

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

SAaAbBbBa
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 εSAaAb
SBbBa
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 0SAaAbSBbBaABA1B5
state 1SAaAba2
state 2SAaAbAA3
state 3SAaAbb4
state 4SAaAbb
state 5SBbBab6
state 6SBbBaBB7
state 7SBbBaa8
state 8SBbBa

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つのセットには共通の要素がありません。AaAbFIRST(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)FOLLOWA)= 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.