の左再帰消去M
が不完全です -- 規則 NewPro → ε を忘れました
それを追加すると、S
あいまいではありませんが、左因数分解が必要な の問題が残ります。FIRST(M) ⊆ FIRST(S) なので、まず M を S に代入する必要があります。
S → 名詞 | 名詞と名詞 | 名詞 NewPro、名詞、および名詞
そして、それを単純に左因数分解できます。
S → 名詞 S'
S' → ε | と名詞 | NewPro、名詞、および名詞
この文法は LL(1) ではなく LL(4) であるという問題があります。これは、一連のNewPro
s の末尾を見つけるために 4 つのトークンの先読みが必要なためです。これは対処するのがはるかに難しい問題ですが、修正することができます。, noun,
最初に NewProにプルする必要があります:
S' → ε | と名詞 | NewPro と名詞
NewPro → , 名詞, | , 名詞
そして、NewPro を左に因数分解します。
NewPro → , 名詞 NewPro'
NewPro' → , | ニュープロ
次に、NewPro' に置き換えます。
NewPro' → , | 、名詞
そして左因数もそれ:
NewPro' → , NewPro'' NewPro'' → ε | 名詞 NewPro'
最終的な文法を与える:
S → 名詞 S'
S' → ε | と名詞 | NewPro と名詞
NewPro → 、名詞 NewPro'
NewPro' → 、NewPro''
NewPro'' → ε | 名詞 NewPro'
これは LL(1) であり、直接使用するか、または NewPro を S' に置き換えて規則の名前を変更し、'-suffixes を取り除くことで少し単純化できます。
S → 名詞 A
A → ε | と名詞 | , 名詞 B と名詞
B → , C
C → ε | 名詞 B