2

私は Kenneth Louden の Compiler Construction book を使用していますが、例が不足しており、これがどのように行われるかを示すルールに従うのは非常に困難です。LR(1) 状態に移動する方法がわかりません。また、LR(1) 状態から LALR(1) 状態に移行する方法もわかりません。

たとえば、これらの LR(1) は次のように述べています。

代替テキスト

「S -> .XX, $」がどのようにそこに到達したかは理解していますが、「X -> .aX, a/b」を見てください。$ がその一部ではないのはなぜですか? $を持つルールから生成されたのではないので、$を持つ必要はありませんか? そして、a/b はどのように現れましたか? この本によると、A -> alpha.Bgama,a で B が非終端記号の場合、B -> .beta, b がすべての B -> beta に追加されます。b は最初の (gamaalpha) にあります。だから、私が理解したことから:

S -> .XX, $ and X -> aX and X -> b => X -> aX, $ and X -> b, $
X -> .aX, $ and X -> b, $ => 何も起こらない
A -> .a, $ => 何も起こらない

しかし、上記の例を考えると、それは完全に間違っているようです。

4

3 に答える 3

1

「S -> .XX, $」がどのようにそこに到達したかは理解できますが、「X -> .aX, a/b」を見てください。$ がその一部ではないのはなぜですか?

アイテムセット I0 の 2 番目と 3 番目のアイテムを参照していますか?

$は、入力記号が空の文字列であることを示します。入力シンボルが a/b のいずれかである a/ b

ターミナル セットは { a, b, $ }、非ターミナル セットは { S' , S , X } です

LR(n)、SLR、LALR(1) はすべてボトムアップ パーサーであることに注意してください。それらは端子から開始し、開始記号 S' まで進みます。

于 2010-01-22T09:42:12.593 に答える
0

FIRST(X) is {a, b}したがって、たとえば状態I0S->.XX,$では、先読み記号としてに追加しX->aX|aますfirst(X)

A → α•Bγ, Χ, X先読みシンボルです

Y = FIRST(γ) if epsilon ∈ FIRST(γ), ή Y = (FIRST(γ)-{epsilon}) ∪ X αν epsilon ∈ FIRST(γ)
B → •β ,Y
于 2011-01-04T12:11:18.603 に答える
0

私は最近、この正確な問題についてブログ投稿を書きました。基本的に、最初のセットと、ドットの右側のシンボルが null 可能かどうかに関係しています。私は自分自身をできるだけ非数学的な用語で表現しようとしました。

LR1 クロージャの計算

于 2012-02-22T07:11:52.627 に答える