1 unstable release
0.1.0 | Jun 7, 2020 |
---|
#168 in #parser-generator
Used in pegtastic
285KB
4.5K
SLoC
Parsing Expression Grammars in Rust
pegtastic
is an experimental third party fork of rust-peg
. This fork is not ready for general consumption yet.
rust-peg
is a simple yet flexible parser generator based on the Parsing Expression Grammar formalism. It provides a Rust macro that builds a recursive descent parser from a concise definition of the grammar.
Features
- Parse input from
&str
,&[u8]
,&[T]
or custom types implementing traits - Customizable reporting of parse errors
- Rules can accept arguments to create reusable rule templates
- Precedence climbing for prefix/postfix/infix expressions
- Helpful
rustc
error messages for errors in the grammar definition or the Rust code embedded within it - Rule-level tracing to debug grammars
Example
pegtastic::parser!{
grammar list_parser() for str {
rule number() -> u32
= n:$(['0'..='9']+) { n.parse().unwrap() }
pub rule list() -> Vec<u32>
= "[" l:number() ** "," "]" { l }
}
}
pub fn main() {
assert_eq!(list_parser::list("[1,1,2,3,5,8]"), Ok(vec![1, 1, 2, 3, 5, 8]));
}
See the tests for more examples
Grammar rule syntax reference in rustdoc
Comparison with similar parser generators
crate | parser type | action code | integration | input type | precedence climbing | parameterizd rules | streaming input |
---|---|---|---|---|---|---|---|
peg | PEG | in grammar | proc macro (block) | &str , &[T] , custom |
Yes | Yes | No |
pest | PEG | external | proc macro (file) | &str |
Yes | No | No |
nom | combinators | in source | library | &[u8] , custom |
No | Yes | Yes |
lalrpop | LR(1) | in grammar | build script | &str |
No | Yes | No |
Dependencies
~79KB