math/
math.rs

1use regex_bnf::*;
2
3bnf! {
4    Operation = left:<SingleExpr> op:<Operator> right:<*Expr>;
5    Operator = op:r"\+|\*";
6
7    Number = val:r"[0-9]+";
8    Group = "(" expr:<*Expr> ")";
9
10    enum SingleExpr = [Number | Group];
11    enum Expr = [Operation | Group | Number];
12}
13
14fn main() {
15    let input = "1+(2*3)";
16    let parser = StringParser::new(input);
17    let result = Expr::parse(parser);
18
19    match result {
20        Ok(result) => println!("{:#?}", result.0),
21        Err(err) => println!("Error: {}", err),
22    }
23}