29 lines
709 B
Rust
29 lines
709 B
Rust
|
|
#[macro_use]
|
||
|
|
extern crate pest_derive;
|
||
|
|
extern crate pest;
|
||
|
|
|
||
|
|
use pest::Parser;
|
||
|
|
|
||
|
|
#[derive(Parser)]
|
||
|
|
#[grammar = "../examples/help-menu.pest"]
|
||
|
|
struct HelpMenuGrammar;
|
||
|
|
|
||
|
|
const INPUT: &str = r"cli help
|
||
|
|
cli positional-command <required-single-argument> [optional-single-argument]
|
||
|
|
cli [choice | of | one | or | none | of | these | options]
|
||
|
|
cli <choice | of | one | of | these | options>
|
||
|
|
cli [nesting | <is | ok>]
|
||
|
|
";
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
HelpMenuGrammar::parse(Rule::HelpMenu, INPUT)
|
||
|
|
.expect("Error parsing file")
|
||
|
|
.next()
|
||
|
|
.expect("Infallible")
|
||
|
|
.into_inner()
|
||
|
|
.filter(|pair| Rule::Command == pair.as_rule())
|
||
|
|
.for_each(|pair| {
|
||
|
|
println!("{:#?}", pair);
|
||
|
|
});
|
||
|
|
}
|