rust-peg
is a simple yet flexible parser generator that makes it easy to write robust parsers. 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.
&str
, &[u8]
, &[T]
or custom types implementing traitsrustc
error messages for errors in the grammar definition or the Rust
code embedded within itParse a comma-separated list of numbers surrounded by brackets into a Vec<u32>
:
```rust peg::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() { asserteq!(listparser::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
| crate | parser type | action code | integration | input type | precedence climbing | parameterized 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 |