pub mod ast;
pub mod builder;
pub mod lexer;
pub mod parser;
pub mod token;
pub use ast::*;
pub use builder::IrBuilder;
pub use lexer::Lexer;
pub use parser::Parser;
pub use token::{Token, TokenKind};
pub fn parse_source(source: &str) -> Result<Program, Vec<parser::ParseError>> {
let mut lexer = Lexer::new(source);
let tokens = lexer.tokenize().to_vec();
Parser::new(tokens).parse()
}
pub fn build_context(program: &Program) -> Result<lift_core::Context, String> {
let mut ctx = lift_core::Context::new();
let mut builder = IrBuilder::new();
builder.build_program(&mut ctx, program)?;
Ok(ctx)
}