cfg-examples 0.1.0

Library for manipulating context-free grammars.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use cfg::Cfg;

pub fn grammar() -> Cfg {
    let mut bnf = Cfg::new();
    let [expr, op, num, plus, minus, mul, div] = bnf.sym();
    bnf.rule(expr).rhs([expr, op, expr]).rhs([num]);
    bnf.rule(op).rhs([plus]).rhs([minus]).rhs([mul]).rhs([div]);

    for _ in 0..10 {
        let [sym] = bnf.sym();
        bnf.rule(num).rhs([sym, num]).rhs([sym]);
    }
    bnf.set_roots([expr]);
    bnf
}