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());
}
```