mod ast;
mod char;
mod error;
pub mod parser;
pub mod semantics;
mod span;
mod splitter;
mod test_utils;
pub mod tokenizer;
pub mod utils;
mod visitor;
pub use ast::{Action, Ast, Condition, Description, Root};
pub use error::FrontendError;
pub use span::{Position, Span};
pub use tokenizer::{Token, TokenKind};
pub use visitor::Visitor;
pub fn parse(text: &str) -> anyhow::Result<Vec<ast::Ast>> {
splitter::split_trees(text).map(parse_one).collect()
}
pub fn parse_one(text: &str) -> anyhow::Result<ast::Ast> {
let tokens = tokenizer::Tokenizer::new().tokenize(text)?;
let ast = parser::Parser::new().parse(text, &tokens)?;
let mut analyzer = semantics::SemanticAnalyzer::new(text);
analyzer.analyze(&ast)?;
Ok(ast)
}