Previous: Error Reporting, Up: Interface


4.4 アクション中で使える特別な機能

ここの表では、アクション中で有用な、Bisonの構造物、変数、 マクロを示します。

$$
現在の規則で作られるグループに対する意味値を保持する変数のように働きます。 See Actions
$n
現在の規則のn番目の構成要素に対する意味値を保持する変数のように 働きます。See Actions
$<typealt>$
$$に似ていますが、%union宣言で指定された共用体の中の typealtを選びます。 See Data Types of Values in Actions
$<typealt>n
$nに似ていますが、%union宣言で指定された共用体の中の typealtを選びます。 See Data Types of Values in Actions
YYABORT;
yyparseからただちに戻り、失敗を示します。 See The Parser Function yyparse
YYACCEPT;
yyparseからただちに戻り、成功を示します。 See The Parser Function yyparse
YYBACKUP (token, value);
トークンを逆シフトします。 1個の値を還元する規則の中で、先読みトークンがない場合にのみ、 このマクロが使えます。 このマクロは、トークン型がtokenで意味値がvalueのトークンを、 先読みトークンとして格納し、この規則で還元されるはずだった値を捨てます。

先読みトークンがすでにあるような、このマクロが無効な状況で このマクロを使うと、メッセージ‘cannnot back up’をともなう 文法エラーが報告され、通常のエラー回復が行われます。

どちらの場合も、アクションの残りの部分は実行されません。

YYEMPTY
先読みトークンがない場合に、変数yycharに記憶されている値です。
YYERROR;
ただちに文法エラーを発生させます。この文は、構文解析器がエラーを検出したように エラー回復を始めますが、yyerrorを呼び出さず、 メッセージは表示されません。 もし、エラーメッセージを表示したければ、‘YYERROR’文よりも先に、 明示的にyyerrorを呼び出してください。 See Error Recovery
YYRECOVERING
このマクロの値は、字句解析器が文法エラーからの回復中ならば1、 そうでなければ0です。 See Error Recovery
yychar
現在の先読みトークンを含んでいる変数です (再入可能構文解析器では、yyparseの局所変数です)。 先読みトークンがない場合には、この変数に YYEMPTYという値が入っています。 See Look-Ahead Tokens
yyclearin;
現在の先読みトークンを捨てます。エラー規則の中で有用です。 See Error Recovery
yyerrok;
後に続く文法エラーに対して、エラーメッセージの生成を再開します。 これは、エラー規則で特に重要です。 See Error Recovery
@n
現在の規則の第n要素の、行番号と列番号を含む、 配列変数のように働きます。 次のようなメンバがあります。
          struct {
            int first_line, last_line;
            int first_column, last_column;
          };

たとえば、第3要素の開始行番号を知るには、 ‘@3.first_line’とします。

この構造体のメンバを有効な情報にするためには、 yylexがそれぞれのトークンに対して、 情報を提供する必要があります。 一部分のメンバだけが必要ならば、 yylexはそのメンバの値を設定するだけでかまいません。 1

この機能を使うと、字句解析器が著しく遅くなります。


脚注

[1] 【訳注】yylexは、変数yyllocに、 トークンの位置情報を代入します。