- ある状態で何をなすべきかを示す基本的な操作(operation) は, closure, goto で表現される.
- は,アイテム集合, は,文法のシンボルである(非終端記号か,終端記号か).
- Closure は,非終端記号の左側にドットがあるアイテムを,アイ テムの集合に追加する.
- goto は, の全てのアイテムに対して, の前にあるドットを の後にする.
Closure
repeat
for にある全てのアイテム に対して,
for という production に対して,
until が変化しなくなる
return
Goto
=
を空集合とする.
for にあるアイテム に対して,
に を追加する.
return Closure
- 以下に LR(0) パーサのアルゴリズムを示す.シフトと,遷移(goto) の み.
を に初期化する.
を 空にする.
repeat
for にある各状態 に対して,
for に対する各 に対して,
let を Goto とする.
until と がこの繰り返しで変化しない.
- ここでは, Goto を計算していない.その代わり, accept アクションを計算する.
- 図3.21 で Grammar 3.20 のための状態遷移図を示す.
- LR(0)の還元アクションのための集合 を計算するアルゴリズムを以 下に示す.
for にある各状態 に対して,
for にある各アイテム に対して,
- 表 3.22 に,この文法のためのパース表を示す.
- 各辺 に対して, が終端記号のとき,テーブ ル の位置に, アクション をおく.
- が非終端記号のとき, の位置に, アクションを おく.
- アイテム をもつ各状態 において,位置 に アクションをおく.
- 最後に,アイテム を含む状態 (行末にドットを含む production ) に対して,トークン のための の位置に, アクションをおく.
- LR(0) は先読みを必要としないので,各状態に対しては、一つのアクショ ンを必要とする.シフトまたは,還元(reduce)
であり,両方は必要ではない.
- 実際には,どの状態で シフトするかを知る必要があり,行にその状態 番号,列として文法シンボルをとる.