1extern crate ukhasnet_parser;
2use ukhasnet_parser::{Rdp, StringInput, Parser, ParserError};
3use std::env::args;
4
5fn main() {
6 let packet = if args().len() == 2 {
7 args().nth(1).unwrap()
8 } else {
9 "2bT12.34,15H38W123Z1:hello world[AG]".to_owned()
10 };
11 println!("Parsing '{}':", packet);
12
13 let mut parser = Rdp::new(StringInput::new(&packet));
14
15 match parser.packet() {
16 true => println!("Parsed OK:"),
17 false => {
18 let (expected, position) = parser.expected();
19
20 println!("Failure at input position {}", position);
21 println!("\n{}", packet);
22 for _ in 0..position { print!(" "); }
23 println!("^");
24
25 println!("Expected one of:");
26 println!("{:?}", expected);
27
28 let err = ParserError::from_parser(&mut parser);
29 println!("Error: {:?}", err);
30
31 panic!("Cannot proceed");
32 }
33 };
34
35 let mut indent = 0;
36 let mut parents = vec![&parser.queue()[0]];
37 let mut prev_t = parents[0];
38
39 for t in parser.queue() {
40 if t.start >= prev_t.start && t.end <= prev_t.end {
41 indent += 1;
42 parents.push(prev_t);
43 } else {
44 while t.start >= parents.last().unwrap().end {
45 parents.pop();
46 indent -= 1;
47 }
48 }
49 for _ in 0..(indent-1) {
50 print!(" ");
51 }
52 println!("{:?} {}-{}", t.rule, t.start, t.end);
53 prev_t = t;
54 }
55 println!("");
56
57 println!("{:?}", parser.parse());
58}