2016-05-11 17 views
0

私は練習問題を解決しようとしていましたが、私はサンプル回答と私とを比較しようとしたときに問題に直面しました。ここでは文法は、変換前にある:LL(k)文法に変換します

E-> S* 
S-> SD 
S-> D 
D-> [D] 
D-> x 

開始記号はEであり、他非終端記号はSDです。ここ

私の答えは次のとおりです。サンプルの回答で

E-> S* 
S-> DS' 
S'-> DS' 
S'-> 
D-> [D] 
D-> x 

、彼らはS-> DS'を持っていない、とEはE-> DS'*になります。左再帰を除去するための本で使用される方法、

A -> Aa 
A -> b 

=> A -> bA' 
    A' -> aA' 
    A' -> 

S-> DS'があるはずです。私は今これについて混乱している、そしておそらく私はちょうどこのメソッドを理解していない。誰も私にこれについてのヒントを教えてもらえますか?また、星記号の意味を教えていただけますか*ここにありますか?どうもありがとう!

答えて

0

あなたの答えに間違いはありません。サンプルの答えは、それを変換した後の文法を単純化するだけです。

E -> S* 
S -> DS' 

S'Dのルールを与えられ、SEが他の作品には存在しないと仮定すると、文法のこの部分は、最初の製造におけるSは単にた

E -> DS'* 

と等価です除去された第2の生産物に定義されているように、DS'に置き換えられる。

*シンボルはおそらくKleene starです。これは、Sが任意の回数(ゼロを含む)発生する可能性があることを意味します。しかし文脈がなければ、それは伝えるのが難しく、また別のことを意味するかもしれません。

+0

ありがとうございました! – dajavanoob

+0

この例が現れるテキストを見ることなく、 'S *'がKleeneの星として意図されているとは思われません。第1に、文法はあいまいである(なぜなら、 'S'は事実上' D * 'であるから)、そしてCFGsは通常、Kleeneの星で書かれていない(したがって 'S'のための再帰)。私が大部分の人が "S $' "と書くと、" S "の後に" S "と入力の終わりがあるという特有の表記法として" S * "を使っている可能性が高いようです。 – rici

+0

そうかもしれない。また、 '*'文字を意味するかもしれません。質問の情報から、それを伝えるのは難しいです。私は答えを編集しました。 – flyx

関連する問題