Skip to content

Commit

Permalink
asm: Big symbol indexing/resolver/verifier refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Granddave committed Jan 18, 2024
1 parent 515ed16 commit ecdac86
Show file tree
Hide file tree
Showing 7 changed files with 363 additions and 363 deletions.
15 changes: 11 additions & 4 deletions src/assembler.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use anyhow::{Context, Result};
use clap::Args;

use self::{codegen::generate, symbols::resolve_symbols};

/// Lexes code into tokens.
///
/// Converts a string into tokens. For example, the string `LDA #$10` would be
Expand All @@ -18,13 +20,18 @@ pub mod lexer;
/// Parses tokens into an AST.
pub mod parser;

/// Resolves symbols in an AST.
pub mod symbols;

/// Generates machine code from an AST.
pub mod codegen;

#[derive(Debug, thiserror::Error)]
pub enum AssemblerError {
#[error("Parser error: {0}")]
Parse(#[from] parser::ParseError),
#[error("Symbol resolution error: {0}")]
Symbol(#[from] symbols::SymbolError),
#[error("Code generation error: {0}")]
CodeGen(#[from] codegen::CodeGenError),
}
Expand All @@ -43,12 +50,12 @@ pub struct AssemblyArgs {
#[tracing::instrument]
pub fn assemble_code(input: &str, _program_start: u16) -> Result<Vec<u8>, AssemblerError> {
// TODO: Remove _program_start

let mut lexer = lexer::Lexer::new(input);
let mut parser = parser::Parser::new(&mut lexer)?;
let ast = parser.parse_program()?;

let mut generator = codegen::Generator::new();
let program = generator.generate(ast)?;
let mut ast = parser.parse_program()?;
resolve_symbols(&mut ast)?;
let program = generate(ast)?;

Ok(program)
}
Expand Down
Loading

0 comments on commit ecdac86

Please sign in to comment.