Next: , Previous: Start Decl, Up: Declarations


3.6.7 純粋(再入可能)構文解析器

再入可能(reentrant)プログラムとは、進路を変えないプログラム、 いいかえれば、完全に純粋な(pure)(読み出し専用)コードからなる プログラムです。 1 再入可能性は、非同期実行が可能な場合に重要です。 たとえば、再入可能でないプログラムを、 シグナルハンドラから呼び出すことは危険です。マルチスレッド制御システムでは、 再入不能プログラムはインターロックからしか呼び出せません。

通常は、Bisonは再入可能でない構文解析器を生成します。 これはほとんどの使用に合い、YACCとの互換性も保ちます。 (標準のYACCインターフェースは継続的に非再入可能であります。 というのは、yylexyylvalyylloc との通信に 静的に確保された変数 2 を使うからです。

代わりに、純粋な、再入可能な構文解析器を生成することができます。 次のような%pure_parser Bison宣言は、 再入可能な構文解析器を生成します。

     %pure_parser

この宣言によって、上記の2個の通信用変数yylvalyyllocが、 yyparseの局所変数になり、 yylex字句解析関数を呼び出す方法が変わります。 詳細については、See Calling Conventions for Pure Parsersyyparseの中のyynerrs変数も局所変数になります (see The Error Reporting Function yyerror)。 yypase関数自体を呼び出す方法は変わりません。

解析器が純粋かどうかは文法規則には全く関係しません。 全ての有効な文法から、純粋な解析器と非再入可能な解析器の どちらかを生成するこができます。


Footnotes

[1] 【訳注】ある手続きの終了を待たずに、その手続きを再度呼び出せる ことでもあります。

[2] 【訳注】他のソースファイルから見えないとう意味ではなく、 メモリ上の固定番地に置かれるという意味。