sbpf_assembler/
lib.rs

1use anyhow::Result;
2
3// Tokenizer and parser
4pub mod lexer;
5pub mod parser;
6
7// Error handling and diagnostics
8pub mod errors;
9pub mod macros;
10pub mod messages;
11
12// Intermediate Representation
13pub mod ast;
14pub mod astnode;
15pub mod dynsym;
16pub mod instruction;
17pub mod syscall;
18
19// ELF header, program, section
20pub mod header;
21pub mod program;
22pub mod section;
23
24// Debug info
25pub mod debuginfo;
26
27// WASM bindings
28#[cfg(target_arch = "wasm32")]
29pub mod wasm;
30
31pub use self::{errors::CompileError, lexer::tokenize, parser::parse_tokens, program::Program};
32
33pub fn assemble(source: &str) -> Result<Vec<u8>, Vec<CompileError>> {
34    let tokens = match tokenize(source) {
35        Ok(tokens) => tokens,
36        Err(errors) => {
37            return Err(errors);
38        }
39    };
40    let parse_result = match parse_tokens(&tokens) {
41        Ok(program) => program,
42        Err(errors) => {
43            return Err(errors);
44        }
45    };
46    let program = Program::from_parse_result(parse_result);
47    let bytecode = program.emit_bytecode();
48    Ok(bytecode)
49}