Go forward to Decl Summary.
Go backward to Start Decl.
Go up to Declarations.

A Pure (Reentrant) Parser
-------------------------

   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'.  *Note Calling Conventions for
Pure Parsers: Pure Calling, for the details of this.  The variable
`yynerrs' also becomes local in `yyparse' (*note The Error Reporting
Function `yyerror': Error Reporting.).  The convention for calling
`yyparse' itself is unchanged.