mod bash;
mod c;
mod python;
mod ruchy;
mod typescript;
pub use bash::BashGrammar;
pub use c::CGrammar;
pub use python::PythonGrammar;
pub use ruchy::RuchyGrammar;
pub use typescript::TypeScriptGrammar;
use crate::Language;
pub trait Grammar: Send + Sync + std::fmt::Debug {
fn language(&self) -> Language;
fn validate(&self, code: &str) -> bool;
fn max_enumeration_depth(&self) -> usize {
5 }
}
#[must_use]
pub fn grammar_for(language: Language) -> Box<dyn Grammar> {
match language {
Language::Python => Box::new(PythonGrammar::new()),
Language::Bash => Box::new(BashGrammar::new()),
Language::C => Box::new(CGrammar::new()),
Language::TypeScript => Box::new(TypeScriptGrammar::new()),
Language::Ruchy => Box::new(RuchyGrammar::new()),
Language::Rust => todo!("Rust grammar not yet implemented"),
}
}