Next: C++ Semantic Values, Previous: C++ Bison Interface, Up: C++ Parsers [Contents][Index]
The output files file.hh and file.cc declare and
define the parser class in the namespace yy
. The class name defaults
to parser
, but may be changed using ‘%define api.parser.class
{name}’. The interface of this class is detailed below. It can be
extended using the %parse-param
feature: its semantics is slightly
changed since it describes an additional member of the parser class, and an
additional argument for its constructor.
A structure that contains (only) the token_kind_type
enumeration,
which defines the tokens. To refer to the token FOO
, use
yy::parser::token::FOO
. The scanner can use ‘typedef
yy::parser::token token;’ to “import” the token enumeration (see Calc++ Scanner).
An enumeration of the token kinds. Its enumerators are forged from the
token names, with a possible token prefix
(see api.token.prefix
):
/// Token kinds. struct token { enum token_kind_type { YYEMPTY = -2, // No token. YYEOF = 0, // "end of file" YYerror = 256, // error YYUNDEF = 257, // "invalid token" PLUS = 258, // "+" MINUS = 259, // "-" [...] VAR = 271, // "variable" NEG = 272 // NEG }; }; /// Token kind, as returned by yylex. typedef token::token_kind_type token_kind_type;
The types for semantic values. See C++ Semantic Values.
The type of locations, if location tracking is enabled. See C++ Location Values.
This class derives from std::runtime_error
. Throw instances of it
from the scanner or from the actions to raise parse errors. This is
equivalent with first invoking error
to report the location and
message of the syntax error, and then to invoke YYERROR
to enter the
error-recovery mode. But contrary to YYERROR
which can only be
invoked from user actions (i.e., written in the action itself), the
exception can be thrown from functions invoked from the user action.
Build a new parser object. There are no arguments, unless ‘%parse-param {type1 arg1}’ was used.
const location_type&
l, const std::string&
m) ¶const std::string&
m) ¶Instantiate a syntax-error exception.
Run the syntactic analysis, and return 0 on success, 1 otherwise. Both
routines are equivalent, operator()
being more C++ish.
The whole function is wrapped in a try
/catch
block, so that
when an exception is thrown, the %destructor
s are called to release
the lookahead symbol, and the symbols pushed on the stack.
Exception related code in the generated parser is protected by CPP guards
(#if
) and disabled when exceptions are not supported (i.e., passing
-fno-exceptions to the C++ compiler).
std::ostream&
o) ¶Get or set the stream used for tracing the parsing. It defaults to
std::cerr
.
Get or set the tracing level (an integral). Currently its value is either 0, no trace, or nonzero, full tracing.
const location_type&
l, const std::string&
m) ¶const std::string&
m) ¶The definition for this member function must be supplied by the user: the parser uses it to report a parser error occurring at l, described by m. If location tracking is not enabled, the second signature is used.
Next: C++ Semantic Values, Previous: C++ Bison Interface, Up: C++ Parsers [Contents][Index]