Racc の生成するパーサはすべて
Object
プリフィックス "Racc_" がついた定数はパーサの予約定数です。
そのような定数は使わないでください。動作不可能になります。
ここに載っているもののほか、プリフィクス "racc_" および "_racc_" が
ついたメソッドはパーサの予約名です。そのようなメソッドは使わないで
ください。
このメソッドを呼ぶことによってパースが開始します。また、トークンが必要
になった時は
パーサが次のトークンを読みこむ時に使います。[記号, その値]の形式の配列
を返してください。記号はデフォルトでは
また、もう送るシンボルがなくなったときには
このメソッドは抽象メソッドなので
このメソッドを呼ぶことによってパースが開始します。このメソッドでは始め
てトークンが必要になった時点で recv に対して mid
メソッドを呼び出し、そのブロックからトークンを得ます。つまり
少し注意が必要なのは、
さらにさらに言うと、
パーサコアが文法エラーを検出するとよびだします(yacc での
引数は、err_tok がパースエラーをおこした記号(の内部表現の整
数)、err_val がその値、_values はその時点の値ス
タックです。err_tok は
デフォルトでは例外
Racc トークンの内部表現(整数)を文法ファイル上の記号表現の文字列に変換
します。t が整数でない場合は
エラー回復モードに入ります。このとき
エラー回復モードから復帰します。アクション以外からは呼び出さないでくだ
さい。
Copyright (c) 1999-2001 Minero Aoki
<aamine@loveruby.net>
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 を抜けます。