SmaCCToken の構造
{値 (開始位置, 終了位置, ID)}
GGrammarParser(SmaCCParser)>>performParsingLoop では何をやっているか?
- 現在のトークンを取り出す。
- パーサは transitionTable :: 状態(スタックのケツ) -> トークンID を元に、アクション番号を取得
- アクションタイプ(アクション番号 の下位2ビット)を取り出す
- アクション番号 := アクション番号 / 4 (これはキタナイ!)
- 次に何をするか判定
- アクションタイプが 1 (2r01) ならシフト
- アクションタイプが 2 (2r10) なら還元
- その他はエラー
色々なところに現れる数字を整理してみよう。
- トークンID SmaCCToken>>id SmaCCScanner>>next によりスキャナから取得
- 状態ID
- アクション番号
nonterminal -> terminal へ変換する操作参照も全部交換