use crate::program::Instruction; use lexer::{Lexer, TokenKind}; use parser::Parser; use pos::Span; 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(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() }