1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
pub use crate::xkb::{Rule, XkbParser}; pub use ast::File as Xkb; use from_pest::FromPest; use pest::Parser; use std::error::Error; pub fn parse(file: &str) -> Result<Xkb, Box<dyn Error>> { let mut parse_tree = XkbParser::parse(Rule::file, file)?; let syntax_tree = Xkb::from_pest(&mut parse_tree).map_err(|e| format!("ast generation failed: {:?}", e))?; Ok(syntax_tree) } pub(crate) mod xkb { #[derive(Debug, Clone, pest_derive::Parser)] #[grammar = "xkb.pest"] pub struct XkbParser; } pub mod ast;