sbpf_assembler/
lib.rs

1use anyhow::Result;
2
3// Tokenizer and parser
4pub mod parser;
5pub mod lexer;
6pub mod opcode;
7
8// Error handling and diagnostics
9pub mod macros;
10pub mod errors;
11pub mod messages;
12
13// Intermediate Representation
14pub mod ast;
15pub mod astnode;
16pub mod dynsym;
17pub mod instruction;
18pub mod syscall;
19
20// ELF header, program, section
21pub mod header;
22pub mod program;
23pub mod section;
24
25// Debug info
26pub mod debuginfo;
27
28// WASM bindings
29#[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}