diff --git a/parser/src/program_parser.rs b/parser/src/program_parser.rs index 32249f8..15096a7 100644 --- a/parser/src/program_parser.rs +++ b/parser/src/program_parser.rs @@ -2,9 +2,10 @@ * Eryn Wells */ -use std::fmt::Debug; use sibillexer::{Lex, Token}; +use list_parser::ListParser; use node_parser::{NodeParser, NodeParseResult}; +use sym_parser::SymParser; #[derive(Debug)] pub struct ProgramParser; @@ -17,7 +18,22 @@ impl ProgramParser { impl NodeParser for ProgramParser { fn parse(&mut self, lex: Lex) -> NodeParseResult { - NodeParseResult::Error { msg: "womp".to_string() } + match lex.token() { + Token::LeftParen => { + let parser = ListParser::new(); + let parser = Box::new(parser); + NodeParseResult::Push { next: parser } + }, + Token::RightParen => { + let msg = format!("Expected symbol found {:?}", lex); + NodeParseResult::error(msg) + }, + Token::Id => { + let parser = SymParser{}; + let parser = Box::new(parser); + NodeParseResult::Push { next: parser } + } + } } }