前: Declarations, 上: Grammar File
Bisonを使うプログラムのほとんどは、言語を1つだけ構文解析し、
したがって、Bison構文解析器を1つだけ含みます。
しかし、1つのプログラムで2種類以上の言語を構文解析したいときは、
どうすればよいでしょうか? そうするためには、yyparse
、yylval
などの2重定義の衝突を防ぐ必要があります。
これを容易にする方法が、オプション`-p prefix'の利用です (see Invoking Bison)。 これによって、Bison構文解析器のインターフェイス関数と変数の名前が、 `yy'で始まる代わりにprefixで始まります。 これでそれぞれの構文解析器に、衝突しないような異なる名前を与えられます。
変更される名前は、
yyparse
、yylex
、yyerror
、yynerrs
、
yylval
、yychar
、yydebug
で全部です。
たとえば、`-p c'オプションを使えば、これらの名前は、
cparse
、clex
などに変わります。
Bisonに関連する上記以外の変数とマクロのすべての
名前は変わりません。これらは、広域ではないので、
異なる構文解析器で同じ名前が使われても衝突しません。
たとえば、YYSTYPE
の名前は変わりませんが、
この定義は構文解析器ごとに異なる方法で行われるので、問題ありません
(see Data Types of Semantic Values)。
`-p'オプションは、さらに、構文解析器ソースファイルの始めで、
yyparse
をprefixparse
と定義するように、
マクロを定義します。
この結果、構文解析器ソースファイル全体で、ある名前を別の名前に変えます。