Expand description
pest. The Elegant Parser
pest is a general purpose parser written in Rust with a focus on accessibility, correctness, and performance. It uses parsing expression grammars (or PEG) as input, which are similar in spirit to regular expressions, but which offer the enhanced expressivity needed to parse complex languages.
Getting started
The recommended way to start parsing with pest is to read the official book.
Other helpful resources:
- API reference on docs.rs
- play with grammars and share them on our fiddle
- leave feedback, ask questions, or greet us on Gitter
Usage
The core of pest is the trait Parser, which provides an interface to the parsing
functionality.
The accompanying crate pest_derive can automatically generate a Parser from a PEG
grammar. Using pest_derive is highly encouraged, but it is also possible to implement
Parser manually if required.
.pest files
Grammar definitions reside in custom .pest files located in the crate src directory.
Parsers are automatically generated from these files using #[derive(Parser)] and a special
#[grammar = "..."] attribute on a dummy struct.
#[derive(Parser)]
#[grammar = "path/to/my_grammar.pest"] // relative to src
struct MyParser;The syntax of .pest files is documented in the pest_derive crate.
Inline grammars
Grammars can also be inlined by using the #[grammar_inline = "..."] attribute.
Modules
Macros
Structs
Span::lines().Parser.&str which provides useful methods to manually parse that string.Enums
ParserState.ParserState.PEEK[a..b]/stack_match_peek_slice.Parser.Traits
Functions
ParserState from a &str, supplying it to a closure f.