rustygrammar   ![Latest Version] ![API] ![rustygrammar: rustc 1.46.0+]

rusty_grammar is a library that makes use of a modified CYK algorithm to define grammars and understand language.

Example

```rust struct G {}

impl<'grammar> Grammar<'grammar> for G { fn convert(&self) -> Vec> { let mut rules = Vec::new(); rules.push(GrammarRule{ leftsymbol: "ActionSentence", rightsymbol: "Verb NounClause | Verb NounClause PrepClause" }); rules.push(GrammarRule{ leftsymbol: "NounClause", rightsymbol: "Count ANoun | Adjective Noun" }); rules.push(GrammarRule{ leftsymbol: "PrepClause", rightsymbol: "Prep NounClause" }); rules.push(GrammarRule{ leftsymbol: "ANoun", rightsymbol: "Adjective Noun" }); rules.push(GrammarRule{ leftsymbol: "Adjective", rightsymbol: "adjective" }); rules.push(GrammarRule{ leftsymbol: "Prep", rightsymbol: "prep" }); rules.push(GrammarRule{ leftsymbol: "Verb", rightsymbol: "verb" }); rules.push(GrammarRule{ leftsymbol: "Noun", rightsymbol: "noun" }); rules.push(GrammarRule{ leftsymbol: "Count", rightsymbol: "definiteArticle | indefiniteArticle | number" }); rules } }

struct WB {}

impl WordBank for WB { fn lookup(&self, word: &str) -> &str { match word { "examine" => "verb", "sword" => "noun", "rusty" => "adjective", _ => "dne" } } }

fn main() { let g = G{}; let wb = WB{}; let input = "examine rusty sword"; let cyk: CYK = CYK::new(g, wb); let res = cyk.memoizedparse(input); println!("{}", res); println!("finalres: {:?}", res.get_final()); } ```