parser.rb


Parserクラス

Raccの生成するパーサはすべてParserクラスを継承しています。 Parserクラスにはパース中に使用するメソッドがいくつかあり、 そのようなメソッドをオーバーロードすると、パーサの初期化などができます。

逆に言えば、これらのメソッドを変に再定義すると挙動がおかしく なりますので注意してください。

ファイル

racc/parser.rb

スーパークラス

Object

定数

プリフィックス "Racc_" がついた定数はパーサの予約定数です。 そのような定数は使わないでください。パース不可能になります。

メソッド

next_token (abstract)
パーサが次のトークンを読みこむ時に使います。[トークンシンボル,その値] の形式の配列を返してください。トークンシンボルの値は、デフォルトでは です。これを変更する方法については、 文法リファレンスを参照してください。

また、もう送るシンボルがなくなったときには、[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>