1pub mod token;
6pub mod syntax;
7pub mod parser;
8pub mod printer;
9pub mod loader;
10
11pub use loader::{load_program, load_program_from_str, LoadError};
12pub use parser::{parse, ParseError};
13pub use printer::print_program;
14pub use syntax::*;
15pub use token::{lex, LexError, Token, TokenKind};
16
17pub fn parse_source(src: &str) -> Result<Program, SyntaxError> {
19 let toks = lex(src).map_err(SyntaxError::Lex)?;
20 parse(toks).map_err(SyntaxError::Parse)
21}
22
23#[derive(Debug, thiserror::Error)]
24pub enum SyntaxError {
25 #[error(transparent)]
26 Lex(#[from] LexError),
27 #[error(transparent)]
28 Parse(#[from] ParseError),
29}