A reentrant program is one which does not alter in the course of execution; in other words, it consists entirely of pure (read-only) code. Reentrancy is important whenever asynchronous execution is possible; for example, a nonreentrant program may not be safe to call from a signal handler. In systems with multiple threads of control, a nonreentrant program must be called only within interlocks.
The Bison parser is not normally a reentrant program, because it uses
statically allocated variables for communication with yylex
. These
variables include yylval
and yylloc
.
The Bison declaration %pure_parser
says that you want the parser
to be reentrant. It looks like this:
%pure_parser
The effect is that the two communication variables become local
variables in yyparse
, and a different calling convention is used
for the lexical analyzer function yylex
. See section Calling Conventions for Pure Parsers, for the details of this. The
variable yynerrs
also becomes local in yyparse
(see section The Error Reporting Function yyerror
).
The convention for calling yyparse
itself is unchanged.
Go to the first, previous, next, last section, table of contents.