Next: D Complete Symbols, Previous: Special Features for Use in D Actions, Up: D Parsers [Contents][Index]
Normally, Bison generates a pull parser for D. The following Bison declaration says that you want the parser to be a push parser (see %define Summary):
%define api.push-pull push
Most of the discussion about the D pull Parser Interface, (see D Parser Interface) applies to the push parser interface as well.
When generating a push parser, the method pushParse
is created with
the following signature:
Symbol
sym) ¶The primary difference with respect to a pull parser is that the parser
method pushParse
is invoked repeatedly to parse each token. This
function is available if either the ‘%define api.push-pull push’ or
‘%define api.push-pull both’ declaration is used (see %define Summary).
The value returned by the pushParse
method is one of the following:
ACCEPT
, ABORT
, or PUSH_MORE
. This new value,
PUSH_MORE
, may be returned if more input is required to finish
parsing the input.
If api.push-pull
is defined as both
, then the generated parser
class will also implement the parse
method. This method’s body is a
loop that repeatedly invokes the scanner and then passes the values obtained
from the scanner to the pushParse
method.