#![allow(clippy::print_stdout, clippy::print_stderr)]
use bnf::Grammar;
fn main() {
let bnf_input = r#"
<dna> ::= <base> | <base> <dna>
<base> ::= 'A' | 'C' | 'G' | 'T'
"#;
let grammar: Grammar = match bnf_input.parse() {
Ok(g) => g,
Err(e) => {
eprintln!("Failed to create grammar from BNF string: {e}");
return;
}
};
let parser = match grammar.build_parser() {
Ok(p) => p,
Err(e) => {
eprintln!("Failed to create parser: {e}");
return;
}
};
let sentence = "GATTACA";
println!("Parsing input: {sentence}");
let mut parse_trees = parser.parse_input(sentence);
match parse_trees.next() {
Some(parse_tree) => {
println!("Parse tree:\n{parse_tree}");
}
None => {
println!("Grammar could not parse the sentence");
}
}
}