From bb670049840e64e96b9bf0bf72897d6f3a928194 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sun, 23 Nov 2025 14:50:31 -0500 Subject: audio: refactor everything --- audio/src/parse/mod.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'audio/src/parse/mod.rs') diff --git a/audio/src/parse/mod.rs b/audio/src/parse/mod.rs index 726aaa2..895ddbd 100644 --- a/audio/src/parse/mod.rs +++ b/audio/src/parse/mod.rs @@ -1,13 +1,33 @@ use crate::program::Instruction; +use lexer::{Lexer, TokenKind}; use parser::Parser; +use pos::Span; -pub type Result = std::result::Result; - -mod lex; +mod lexer; mod macros; mod parser; +mod pos; +mod util; + +pub type Result = std::result::Result; + +#[derive(Clone, Debug)] +pub struct ParserError { + pub span: Span, + pub msg: String, + pub file: Option, +} -pub fn parse(raw_src: &str) -> Result> { - let src = macros::process(raw_src); - Parser::new(&src).parse() +pub fn parse(src: &str) -> Result> { + let mut tokens = vec![]; + let mut lexer = Lexer::new(src); + loop { + let token = lexer.next_token()?; + tokens.push(token); + if token.kind == TokenKind::Eof { + break; + } + } + tokens = macros::process(tokens)?; + Parser::new(tokens).parse() } -- cgit v1.2.3-freya