1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
extern crate dpr;
// extern crate dpr;
// fn main() -> Result<(), dpr::Error> {
// let result = dpr::Peg::new(
// r#"
// main = expr
// expr = term (
// _ add_op _ term ->$(term)$(add_op)
// )*
// term = factor (
// _ mult_op _ factor ->$(factor)$(mult_op)
// )*
// factor = pow (
// _ pow_op _ subexpr ->$(subexpr)$(pow_op)
// )*
// pow = subexpr (
// _ pow_op _ pow ->$(pow)$(pow_op)
// )*
// subexpr = '(' _ expr _ ->$(expr)
// ( ')' ->$(:none)
// / error("parenthesis error")
// )
// / number ->PUSH $(number)$(:endl)
// / '-' _ subexpr ->PUSH 0$(:endl)$(subexpr)SUB$(:endl)
// number = ([0-9]+ ('.' [0-9])?)
// add_op = '+' ->EXEC ADD$(:endl)
// / '-' ->EXEC SUB$(:endl)
// mult_op = '*' ->EXEC MUL$(:endl)
// / '/' ->EXEC DIV$(:endl)
// pow_op = '^' ->EXEC POW$(:endl)
// _ = ' '*
// "#,
// )
// .gen_rules()?
// .parse("1+2*3")?
// // .parse("2^3^4^5")?
// // .parse("2-3-4-5")?
// // .parse("-(-1+2* 3^5 ^(- 2 ) -7)+8")?
// // .parse("-(1))")?
// .replace()?
// // ...
// ;
// // println!("{:#?}", result);
// println!("{}", result.str());
// Ok(())
// }
// extern crate dpr;
// fn main() -> Result<(), dpr::Error> {
// let result = dpr::Peg::new(
// "
// main = char+
// char = 'a' -> $(:el)A
// / 'b' -> $(:el)B
// / ch:. -> $(:el)$(ch)
// ",
// )
// .gen_rules()?
// .parse("aaacbbabdef")?
// .replace(Some(&dpr::FnCallBack(custom_funtions)))?
// // ...
// ;
// println!("{:#?}", result);
// println!("{}", result.str());
// Ok(())
// }
// fn custom_funtions(fn_txt: &str) -> Option<String> {
// match fn_txt {
// "el" => Some("\n".to_string()),
// _ => None,
// }
// }