Racc の生成するパーサはすべて
Object
プリフィックス "Racc_" がついた定数はパーサの予約定数です。
そのような定数は使わないでください。動作不可能になります。
ここに載っているもののほか、プリフィクス "racc_" および "_racc_" が
ついたメソッドはパーサの予約名です。そのようなメソッドは使わないで
ください。
このメソッドを呼ぶことによってパースが開始します。また、トークンが必要
になった時は
パーサが次のトークンを読みこむ時に使います。[記号, その値]の形式の配列
を返してください。記号はデフォルトでは
また、もう送るシンボルがなくなったときには
このメソッドは抽象メソッドなので
このメソッドを呼ぶことによってパースが開始します。このメソッドでは始め
てトークンが必要になった時点で recv に対して mid
メソッドを呼び出し、そのブロックからトークンを得ます。つまり
少し注意が必要なのは、
さらにさらに言うと、
パーサコアが文法エラーを検出するとよびだします(yacc での
引数は、err_tok がパースエラーをおこした記号(の内部表現の整
数)、err_val がその値、_values はその時点の値ス
タックです。err_tok は
デフォルトでは例外
Racc トークンの内部表現(整数)を文法ファイル上の記号表現の文字列に変換
します。t が整数でない場合は
エラー回復モードに入ります。このとき
エラー回復モードから復帰します。アクション以外からは呼び出さないでくだ
さい。
Copyright (c) 1999-2001 Minero Aoki
<aamine@cd.xdsl.ne.jp>
Parser
クラスを継承します。
Parser
クラスにはパース中に使用するメソッドがいくつかあり、
そのようなメソッドをオーバーロードすると、パーサの初期化などができます。
逆に言うと、これらのメソッドを変に再定義すると挙動がおかしく
なるわけですから注意してください。
スーパークラス
定数
メソッド
do_parse
next_token
を呼び出します。
next_token
[abstract]
で表します。これを変更する方法については、
文法リファレンスを参照してください。
→その名前の文字列のシンボル (たとえば :ATOM
)
→その文字列そのまま(たとえば、'='
)
[false, なにか]
を返してください。これを忘れるとわけのわからないパースエラーに
なります (一回送れば十分です)。ただし 1.3.7 からは試験的に
nil
も終端として認めるようにしています。
do_parse
を使う場合は
必ず下位クラスで再定義する必要があります。定義しないままパー
スを始めると例外 NotImplementedError
が発生します。
yyparse( recv, mid )
recv#mid
というメソッドを用意して
yyparse(recv,mid)
とすれば recv#mid
からトー
クンを yield
して渡すことができます。yield
するのは next_token
と同じ形式の [記号, 値] です。さらに
このような動作は Ruby の yield
の特性から
と書けます。いちおう書いておくと
yield 記号, 値
は意図したのとは違って
yield [記号, 値]
になります。
yield()[記号, 値]
recv#mid
が呼び出されるのは始めてトー
クンが必要になった時点であるということで、つまりその時点でもうパースが
進行中だということです。よって recv#mid
の最初でパースの
初期化をするとうまくいかない場合があります。それから、トークンの終端を
示す[false, なにか]
を渡したらそれ以上は
yield
しないでください。その場合には例外が発生します。
recv#mid
では必ず yield
してください。しない場合は何が起きても責任持てません。
on_error( err_tok, err_val, _values )
yyerror
)。エラーメッセージを出すなり、例外を発生するなり
してください。このメソッドからもどったあとは、パーサはエラー回復モード
に移行します。
token_to_str
で文法ファ
イル上の表現に直せます。また _values
を変更してはいけません。
ParseError
を発生します。
token_to_str( t )
NameError
を発生
します。t が範囲外の整数だった場合は nil
を返
します。
yyerror
on_error
は呼ばれません。
アクション以外からは呼び出さないでください。
do_parse
、
yyparse
を抜けます。