1pub mod ast;
8pub mod builder;
9pub mod lexer;
10pub mod parser;
11pub mod token;
12
13pub use ast::*;
14pub use builder::IrBuilder;
15pub use lexer::Lexer;
16pub use parser::Parser;
17pub use token::{Token, TokenKind};
18
19pub fn parse_source(source: &str) -> Result<Program, Vec<parser::ParseError>> {
21 let mut lexer = Lexer::new(source);
22 let tokens = lexer.tokenize().to_vec();
23 Parser::new(tokens).parse()
24}
25
26pub fn build_context(program: &Program) -> Result<lift_core::Context, String> {
28 let mut ctx = lift_core::Context::new();
29 let mut builder = IrBuilder::new();
30 builder.build_program(&mut ctx, program)?;
31 Ok(ctx)
32}