rusty_grammar

Crates.iorusty_grammar
lib.rsrusty_grammar
version0.1.2
sourcesrc
created_at2020-09-13 23:43:12.074937
updated_at2020-09-13 23:51:27.513693
descriptionA modified CYK algorithm to work for Language.
homepage
repositoryhttps://gitlab.com/gluaxspeed/rusty_grammar
max_upload_size
id288386
size17,302
gluax (gluax)

documentation

README

rusty_grammar   Latest Version API rusty_grammar: rustc 1.46.0+

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

Example

struct G {}

impl<'grammar> Grammar<'grammar> for G {
	fn convert(&self) -> Vec<GrammarRule<'grammar>> {
		let mut rules = Vec::new();
		rules.push(GrammarRule{ left_symbol: "ActionSentence", right_symbol: "Verb NounClause | Verb NounClause PrepClause" });
		rules.push(GrammarRule{ left_symbol: "NounClause", right_symbol: "Count ANoun | Adjective Noun" });
		rules.push(GrammarRule{ left_symbol: "PrepClause", right_symbol: "Prep NounClause" });
		rules.push(GrammarRule{ left_symbol: "ANoun", right_symbol: "Adjective Noun" });
		rules.push(GrammarRule{ left_symbol: "Adjective", right_symbol: "adjective" });
		rules.push(GrammarRule{ left_symbol: "Prep", right_symbol: "prep" });
		rules.push(GrammarRule{ left_symbol: "Verb", right_symbol: "verb" });
		rules.push(GrammarRule{ left_symbol: "Noun", right_symbol: "noun" });
		rules.push(GrammarRule{ left_symbol: "Count", right_symbol: "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<WB> = CYK::new(g, wb);
	let res = cyk.memoized_parse(input);
	println!("{}", res);
	println!("final_res: {:?}", res.get_final());
}
Commit count: 6

cargo fmt