1extern crate perplex;
3
4use perplex::grammar::{Grammar, Rule};
7use perplex::item_set::ItemSets;
8#[allow(non_snake_case)]
12fn main() {
13 let mut g = Grammar::new();
15 let ntExpr = g.add_nonterminal("Expr");
16 let ntFactor = g.add_nonterminal("Factor");
17 let tnum = g.add_terminal("num");
18 let tlpar = g.add_terminal("'('");
19 let trpar = g.add_terminal("')'");
20 let tplus = g.add_terminal("'+'");
21 g.add_rule(Rule::new(ntExpr, vec![ntFactor.into()]));
22 g.add_rule(Rule::new(
23 ntExpr,
24 vec![tlpar.into(), ntExpr.into(), trpar.into()],
25 ));
26 g.add_rule(Rule::new(ntFactor, vec![tnum.into()]));
27 g.add_rule(Rule::new(ntFactor, vec![tplus.into(), ntFactor.into()]));
28 g.add_rule(Rule::new(
29 ntFactor,
30 vec![ntFactor.into(), tplus.into(), tnum.into()],
31 ));
32
33 let is = ItemSets::compute(&g);
35 println!("{}", is.pretty(&g));
36
37 }