Parsing
Parsing is the act of checking whether a stream of lexemes match a grammar. Since a simple "yes/no" answer is rarely useful, it is common to execute user-defined actions during parsing.
grmtools
contains libraries (cfgrammar
and
lrtable
) which allow users to build their own LR parsers in
whatever fashion they want. However, for 99% of cases, the lrpar
library is what users want and need: a (largely) Yacc-compatible parser. Roughly
speaking, the core parts of grammars work identically in Yacc and lrpar
, but
some other parts of the system have been modernised (e.g. to avoid the use of
global variables) and given a more idiomatic Rust feel. Notably, lrpar
is
built from the ground-up to have a powerful, flexible approach to error
recovery.
Actions
Users can specify what sort of actions they want performed when parsing occurs.
The default is ActionKind::GenericParseTree
which, as its name probably
suggests, creates a generic parse tree, where elements are instances of
the lrpar::parser::Node
enum.
Most users will probably want to specify ActionKind::CustomAction
, where each
production can be annotated with an action. A brief example of this is shown in
the quickstart guide; a more detailed explanation can be found
in the error recovery section.