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