Next: Push Parser Function, Up: Interface [Contents][Index]
yyparse
You call the function yyparse
to cause parsing to occur. This
function reads tokens, executes actions, and ultimately returns when it
encounters end-of-input or an unrecoverable syntax error. You can also
write an action which directs yyparse
to return immediately
without reading further.
The value returned by yyparse
is 0 if parsing was successful (return
is due to end-of-input).
The value is 1 if parsing failed because of invalid input, i.e., input
that contains a syntax error or that causes YYABORT
to be
invoked.
The value is 2 if parsing failed due to memory exhaustion.
In an action, you can cause immediate return from yyparse
by using
these macros:
Return immediately with value 0 (to report success).
Return immediately with value 1 (to report failure).
If you use a reentrant parser, you can optionally pass additional
parameter information to it in a reentrant way. To do so, use the
declaration %parse-param
:
Declare that one or more
argument-declaration are additional yyparse
arguments.
The argument-declaration is used when declaring
functions or prototypes. The last identifier in
argument-declaration must be the argument name.
Here’s an example. Write this in the parser:
%parse-param {int *nastiness} {int *randomness}
Then call the parser like this:
{
int nastiness, randomness;
… /* Store proper data in nastiness
and randomness
. */
value = yyparse (&nastiness, &randomness);
…
}
In the grammar actions, use expressions like this to refer to the data:
exp: … { …; *randomness += 1; … }
Using the following:
%parse-param {int *randomness}
Results in these signatures:
void yyerror (int *randomness, const char *msg); int yyparse (int *randomness);
Or, if both %define api.pure full
(or just %define api.pure
)
and %locations
are used:
void yyerror (YYLTYPE *llocp, int *randomness, const char *msg); int yyparse (int *randomness);
Next: Push Parser Function, Up: Interface [Contents][Index]