english_language_parser/
lib.rs1peg::parser! {
2 pub grammar english_parser() for str {
7 pub rule word() -> &'input str
9 = $(['a'..='z' | 'A'..='Z']+ (['-' | '\'']['a'..='z' | 'A'..='Z']+)* (['\''])?)
10
11 pub rule capital_word() -> &'input str
13 = $(['A'..='Z']['a'..='z' | 'A'..='Z']+ (['-' | '\'']['a'..='z' | 'A'..='Z']+)* (['\''])?)
14
15 pub rule number() -> &'input str
17 = $(['0'..='9']+ ("." ['0'..='9']+)?)
18
19 pub rule date() -> &'input str
21 = $(day:['0'..='3']? ['0'..='9'] "/" month:['0'..='1']? ['0'..='9'] "/" year:['1'..='9']['0'..='9']['0'..='9']['0'..='9'])
22
23 pub rule hour() -> &'input str
25 = $(hour:['0'..='1']? ['0'..='9'] ":" minute:['0'..='5']['0'..='9'] " " period:("am" / "pm"))
26
27 pub rule end_punctuation() -> &'input str
29 = $("..." / ['.' | '?' | '!'])
30
31 pub rule other_punctuation() -> &'input str
33 = $([',' | ';' | ':' | '-'])
34
35 pub rule whitespace() -> &'input str
37 = $([' ' | '\t' | '\n' | '\r'])
38
39 pub rule sentence() -> Vec<&'input str>
41 = capital_w:capital_word() sequence:((word() / date() / hour() / number() / whitespace() / other_punctuation())*) end_punct:end_punctuation() {
42 let mut sequence_vec = sequence.to_vec();
43 sequence_vec.insert(0, capital_w);
44 sequence_vec.push(end_punct);
45 sequence_vec
46 }
47
48 pub rule text() -> Vec<Vec<&'input str>>
52 = sentences:(sentence() ** whitespace()) {
53 sentences
54 }
55 }
56}