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