parser.rb
Raccの生成するパーサはすべてParserクラスを継承しています。
Parserクラスにはパース中に使用するメソッドがいくつかあり、
そのようなメソッドをオーバーロードすると、パーサの初期化などができます。
逆に言えば、これらのメソッドを変に再定義すると挙動がおかしく
なりますので注意してください。
ファイル
racc/parser.rb
スーパークラス
Object
メソッド
- next_token (abstract)
-
パーサが次のトークンを読みこむ時に使います。[トークンシンボル,その値]
の形式の配列を返してください。トークンシンボルの値は、デフォルトでは
- 文法中、引用符でかこまれていないもの
→その名前の文字列をinternして得られる整数(たとえば:ATOM)
- 引用符でかこまれているもの
→その文字列そのまま(たとえば、'=')
です。これを変更する方法については、
文法リファレンスを参照してください。
また、もう送るシンボルがなくなったときには、[false,false] を返してください。
これを忘れるとわけのわからないパースエラーになります。(一回送れば十分です)
また、このメソッドは抽象メソッドなので、必ず下位クラスで再定義する
必要があります。定義しないままパースを始めると例外が発生します。
- on_error( err_tok, err_val, _values )
-
パースエラーを検出したとき、よびだされます(yyerror)。
メッセージを出すなり、例外を発生するなりしてください。
このメソッドからもどったあとは、パーサはエラー回復モードに移行します。
引数は、err_tok がパースエラーをおこしたシンボルトークン(内部表現)、
err_val がその値、残りはアクションで渡されるものと同じです。
デフォルトでは、例外ParseErrorを発生します。
定数
プリフィックス "LR_" がついた定数(共有変数)はパーサの予約定数です。
そのような定数は使わないでください。パース不可能になります。
Copyright (c) 1999,2000 Minero Aoki
<aamine@dp.u-netsurf.ne.jp>