@subsection A Push Parser
@cindex push parser
@cindex push parser
-@findex %define push_pull
+@findex %define api.push_pull
A pull parser is called once and it takes control until all its input
is completely parsed. A push parser, on the other hand, is called
Normally, Bison generates a pull parser.
The following Bison declaration says that you want the parser to be a push
-parser (@pxref{Decl Summary,,%define push_pull}):
+parser (@pxref{Decl Summary,,%define api.push_pull}):
@example
-%define push_pull "push"
+%define api.push_pull "push"
@end example
In almost all cases, you want to ensure that your push parser is also
@example
%pure-parser
-%define push_pull "push"
+%define api.push_pull "push"
@end example
There is a major notable functional difference between the pure push parser
Bison also supports both the push parser interface along with the pull parser
interface in the same generated parser. In order to get this functionality,
-you should replace the @code{%define push_pull "push"} declaration with the
-@code{%define push_pull "both"} declaration. Doing this will create all of the
-symbols mentioned earlier along with the two extra symbols, @code{yyparse}
+you should replace the @code{%define api.push_pull "push"} declaration with the
+@code{%define api.push_pull "both"} declaration. Doing this will create all of
+the symbols mentioned earlier along with the two extra symbols, @code{yyparse}
and @code{yypull_parse}. @code{yyparse} can be used exactly as it normally
would be used. However, the user should note that it is implemented in the
generated parser by calling @code{yypull_parse}.
This makes the @code{yyparse} function that is generated with the
-@code{%define push_pull "both"} declaration slower than the normal
+@code{%define api.push_pull "both"} declaration slower than the normal
@code{yyparse} function. If the user
calls the @code{yypull_parse} function it will parse the rest of the input
stream. It is possible to @code{yypush_parse} tokens to select a subgrammar
@end example
Adding the @code{%pure-parser} declaration does exactly the same thing to the
-generated parser with @code{%define push_pull "both"} as it did for
-@code{%define push_pull "push"}.
+generated parser with @code{%define api.push_pull "both"} as it did for
+@code{%define api.push_pull "push"}.
@node Decl Summary
@subsection Bison Declaration Summary
Some of the accepted @var{variable}s are:
@itemize @bullet
-@item push_pull
-@findex %define push_pull
+@item api.push_pull
+@findex %define api.push_pull
@itemize @bullet
@item Language(s): C (LALR(1) only)
@findex yypush_parse
You call the function @code{yypush_parse} to parse a single token. This
-function is available if either the @code{%define push_pull "push"} or
-@code{%define push_pull "both"} declaration is used.
+function is available if either the @code{%define api.push_pull "push"} or
+@code{%define api.push_pull "both"} declaration is used.
@xref{Push Decl, ,A Push Parser}.
@deftypefun int yypush_parse (yypstate *yyps)
@findex yypull_parse
You call the function @code{yypull_parse} to parse the rest of the input
-stream. This function is available if the @code{%define push_pull "both"}
+stream. This function is available if the @code{%define api.push_pull "both"}
declaration is used.
@xref{Push Decl, ,A Push Parser}.
@findex yypstate_new
You call the function @code{yypstate_new} to create a new parser instance.
-This function is available if either the @code{%define push_pull "push"} or
-@code{%define push_pull "both"} declaration is used.
+This function is available if either the @code{%define api.push_pull "push"} or
+@code{%define api.push_pull "both"} declaration is used.
@xref{Push Decl, ,A Push Parser}.
@deftypefun yypstate *yypstate_new (void)
@findex yypstate_delete
You call the function @code{yypstate_delete} to delete a parser instance.
-function is available if either the @code{%define push_pull "push"} or
-@code{%define push_pull "both"} declaration is used.
+function is available if either the @code{%define api.push_pull "push"} or
+@code{%define api.push_pull "both"} declaration is used.
@xref{Push Decl, ,A Push Parser}.
@deftypefun void yypstate_delete (yypstate *yyps)