Next: Decl Summary, Previous: Start Decl, Up: Declarations
再入可能(reentrant)プログラムとは、進路を変えないプログラム、 いいかえれば、完全に純粋な(pure)(読み出し専用)コードからなる プログラムです。 1 再入可能性は、非同期実行が可能な場合に重要です。 たとえば、再入可能でないプログラムを、 シグナルハンドラから呼び出すことは危険です。マルチスレッド制御システムでは、 再入不能プログラムはインターロックからしか呼び出せません。
通常は、Bisonは再入可能でない構文解析器を生成します。
これはほとんどの使用に合い、YACCとの互換性も保ちます。
(標準のYACCインターフェースは継続的に非再入可能であります。
というのは、yylex
、yylval
や yylloc
との通信に
静的に確保された変数
2
を使うからです。
代わりに、純粋な、再入可能な構文解析器を生成することができます。
次のような%pure_parser
Bison宣言は、
再入可能な構文解析器を生成します。
%pure_parser
この宣言によって、上記の2個の通信用変数yylval
とyylloc
が、
yyparse
の局所変数になり、
yylex
字句解析関数を呼び出す方法が変わります。
詳細については、See Calling Conventions for Pure Parsers。
yyparse
の中のyynerrs
変数も局所変数になります
(see The Error Reporting Function yyerror
)。
yypase
関数自体を呼び出す方法は変わりません。
解析器が純粋かどうかは文法規則には全く関係しません。 全ての有効な文法から、純粋な解析器と非再入可能な解析器の どちらかを生成するこができます。