私は練習問題を解決しようとしていましたが、私はサンプル回答と私とを比較しようとしたときに問題に直面しました。ここでは文法は、変換前にある:LL(k)文法に変換します
E-> S*
S-> SD
S-> D
D-> [D]
D-> x
開始記号はE
であり、他非終端記号はS
とD
です。ここ
私の答えは次のとおりです。サンプルの回答で
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'
があるはずです。私は今これについて混乱している、そしておそらく私はちょうどこのメソッドを理解していない。誰も私にこれについてのヒントを教えてもらえますか?また、星記号の意味を教えていただけますか*
ここにありますか?どうもありがとう!
ありがとうございました! – dajavanoob
この例が現れるテキストを見ることなく、 'S *'がKleeneの星として意図されているとは思われません。第1に、文法はあいまいである(なぜなら、 'S'は事実上' D * 'であるから)、そしてCFGsは通常、Kleeneの星で書かれていない(したがって 'S'のための再帰)。私が大部分の人が "S $' "と書くと、" S "の後に" S "と入力の終わりがあるという特有の表記法として" S * "を使っている可能性が高いようです。 – rici
そうかもしれない。また、 '*'文字を意味するかもしれません。質問の情報から、それを伝えるのは難しいです。私は答えを編集しました。 – flyx