1

これを解決するのに問題があります。LL(1) パースで動作するようにするには、次の文法を書き直す必要があります。

S → 名詞 | 名詞と名詞 | M、名詞、および名詞

M → M、名詞 | 名詞

私が気付いた最初の問題は、ヘッダー M を使用したプロダクションで文法が再帰的であったことでした。これを次のように修正します。

M → 名詞 NewPro

NewPro → 名詞 NewPro

しかし、ヘッダー S の生成があいまいであることに気付きましたが、修正方法がわかりません。名詞を「因数分解」しようとしましたが、実際にはわかりません。

助けてください。

回答ありがとうございます。

4

1 に答える 1

2

の左再帰消去Mが不完全です -- 規則 NewPro → ε を忘れました

それを追加すると、Sあいまいではありませんが、左因数分解が必要な の問題が残ります。FIRST(M) ⊆ FIRST(S) なので、まず M を S に代入する必要があります。

S → 名詞 | 名詞と名詞 | 名詞 NewPro、名詞、および名詞

そして、それを単純に左因数分解できます。

S → 名詞 S'
S' → ε | と名詞 | NewPro、名詞、および名詞

この文法は LL(1) ではなく LL(4) であるという問題があります。これは、一連のNewPros の末尾を見つけるために 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

于 2014-10-26T20:16:55.000 に答える