Crate pest [−] [src]
pest. The Elegant Parser
pest is a PEG parser built with simplicity and speed in mind.
Input & Parser
pest works mainly through two trait
s: Input
& Parser
. Input
defines the capabilities of
an input source, while Parser
provides an interface to the parsing functionality. Since
Parser
is a trait
, parsing needs to be defined either though the #[derive(Parser)]
attribute, or manually through the Position API
. The use of the
derive
is highly encouraged since this is the only way you can make use of pest's PEG
grammar, while manual parser definition can be used where highly specific or efficient parsing
is required.
#[derive(Parser)]
pest comes with a procedural macro crate--pest_derive
--which needs to be included in
Cargo.toml
in order to enable the derive
.
pest_derive = "*"
.pest
files
Grammar definitions reside in custom .pest
files located in the src
directory. Their path is
relative to src
and is specified between the derive
attribute and an empty struct
that
Parser
will be derived on.
Because of a limitation in procedural macros, there is no way for Cargo to know that a module
needs to be recompiled based on the file that the procedural macro is opening. This leads to the
case where modifying a .pest
file without touching the file where the derive
is does not
recompile it if it already has a working binary in the cache. To avoid this issue, the grammar
file can be included in a dummy const
definition while debugging.
const _GRAMMAR: &'static str = include_str!("path/to/my_grammar.pest"); // relative to this file #[derive(Parser)] #[grammar = "path/to/my_grammar.pest"] // relative to src struct MyParser;
The grammar of .pest
files is documented in the
pest_derive
crate.
Modules
inputs |
A |
iterators |
A |
prec_climber |
A |
Macros
parses_to |
A |
Structs
ParserState |
A |
Enums
Error |
An |
Token |
An |
Traits
Parser |
A |
RuleType |
A |
Functions
state |
Creates a |