book_keywords_permit/
book_keywords_permit.rs1fn keyword(state: i32, ch: char) -> (bool, i32) {
2 match state {
3 0 if ch == '$' => (true, 1),
4 0 => (false, -1),
5 1 if ch.is_alphabetic() => (true, 2),
6 1 => (false, -1),
7 2 if ch.is_alphanumeric() => (true, 2),
8 2 if ch == '_' => (true, 3),
9 2 => (false, 0),
10 _ if ch.is_alphanumeric() => (true, 2),
11 _ if ch == '_' => (true, 3),
12 _ => (false, -1),
13 }
14}
15
16fn main() {
17 let mut parser = trivet::parse_from_stdin();
18 parser.borrow_keyword_parser().use_permit = true;
19 parser.borrow_keyword_parser().permit = Box::new(keyword);
20 while !parser.is_at_eof() {
21 match parser.parse_keyword_ws() {
22 Err(err) => {
23 println!("ERROR: {}", err);
24 parser.take_while(|ch| !ch.is_whitespace());
26 parser.consume_ws();
27 }
28 Ok(value) => {
29 println!(" {}", value);
30 }
31 }
32 }
33}