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:
The primary difference with respect to a pull parser is that the parser
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:
PUSH_MORE. This new value,
PUSH_MORE, may be returned if more input is required to finish
parsing the input.
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