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
use std::sync::Arc;
use swiftlet::preclude::*;
fn main() {
// let g = r#"
// s: C
// A: D "a" "b"
// C: "c" A
// D: "d"
// "#;
// let g = r#"
// s: A "fe"
// A: ("1" "2") C*
// C: /\w+/ /\d+/
// "#;
let g = r#"
s: A
A: (X | "a")+ B
B: "b"
X: "x"
"#;
let parser_opt = Arc::new(ParserConfig {
start: "s".to_string(),
debug: true,
..Default::default()
});
let parser = Swiftlet::from_str(g)
.map(|grammar| grammar.parser(parser_opt))
.expect("failed to build parser");
let parsed = parser.parse("xaxb").expect("Failed to parse a text");
parsed.pretty_print();
}