1use anyhow::Result;
2
3pub mod parser;
5pub mod lexer;
6pub mod opcode;
7
8pub mod macros;
10pub mod errors;
11pub mod messages;
12
13pub mod ast;
15pub mod astnode;
16pub mod dynsym;
17pub mod instruction;
18pub mod syscall;
19
20pub mod header;
22pub mod program;
23pub mod section;
24
25pub mod debuginfo;
27
28#[cfg(target_arch = "wasm32")]
30pub mod wasm;
31
32pub use self::{
33 errors::CompileError,
34 parser::parse_tokens,
35 program::Program,
36 lexer::tokenize,
37};
38
39pub fn assemble(source: &str) -> Result<Vec<u8>, Vec<CompileError>>{
40 let tokens = match tokenize(&source) {
41 Ok(tokens) => tokens,
42 Err(errors) => {
43 return Err(errors);
44 }
45 };
46 let parse_result = match parse_tokens(&tokens) {
47 Ok(program) => program,
48 Err(errors) => {
49 return Err(errors);
50 }
51 };
52 let program = Program::from_parse_result(parse_result);
53 let bytecode = program.emit_bytecode();
54 Ok(bytecode)
55
56}