- SLR より,パワフルなアルゴリズムが LR(1) パースアルゴリズムで ある.
- 文脈自由文法で文法を記述することができるほとんどの言語は, LR(1) 文法である.
- LR(1) パース表は,LR(0) の表と似ている.が,アイテムの意 味は,より洗練されている.
- LR(1) アイテムは,文法 production(grammar production), 右側の位置(a right-hand-side
position)(ドットで示す), 先読みシンボル からなる.
- で,シーケンス は, スタックトップにあり,入力の頭には,文字列 があることを示す.
- LR(1) の状態は,LR(1) アイテムからなる.LR(1) の Closure と Goto は,先読みを導入している.
Closure
=
repeat
repeat
for
にあるアイテム に対して,
for productiontex2html_image_mark>#tex2html_wrap_inline611# に対して,
for に対して,
until が変化しない.
return
- Goto
Goto
for にあるアイテム に対して,
に を追加する.
return Closure
- start 状態は,アイテム のクロージャであ る.ファイル終了マーク(End-of-File) は,シフトされないので, 先読みシンボル には意味はない.
- 還元(reduce) アクションは,以下で与えられるアルゴリズムである.
for
にある 状態 に対して,
for にある各アイテム に対して,
アクション は,状態 において,先読みシン ボル でパーサは,規則 を還元することを示す.
- Grammar 3.26 は,SLRではない(Exercise 3.9 を参照)が,LR(1)文法のク ラスである.図3.27
は,この文法のための状態遷移を示している.
- この図では,先読みが異なるだけで同じ production であるアイテムが ある.そのような場合には,以下のように,省略する.
これを,以下のように省略する.
- 状態グラフから導出されたLR(1) パース表は,図3.28a のようになる.
- production の最後にドットが来た場合は,LR(1) 表では還元アクショ ンが実行される(図3.27
の状態 3 のとき, の最後にドット がある).
- ドットが,終端記号または,非終端記号の左に来た場合は,LR(1) パース表では,シフトか遷移(goto)
アクションになる(LR(0) 表にあるとき と同様である).