前: Error Reporting, 上: 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に、 トークンの位置情報を代入します。