[parser] Fill out ProgramParser

This commit is contained in:
Eryn Wells 2018-08-23 20:26:55 -07:00
parent 80bf4b7bf1
commit 4bade1af4a

View file

@ -2,9 +2,10 @@
* Eryn Wells <eryn@erynwells.me> * Eryn Wells <eryn@erynwells.me>
*/ */
use std::fmt::Debug;
use sibillexer::{Lex, Token}; use sibillexer::{Lex, Token};
use list_parser::ListParser;
use node_parser::{NodeParser, NodeParseResult}; use node_parser::{NodeParser, NodeParseResult};
use sym_parser::SymParser;
#[derive(Debug)] #[derive(Debug)]
pub struct ProgramParser; pub struct ProgramParser;
@ -17,7 +18,22 @@ impl ProgramParser {
impl NodeParser for ProgramParser { impl NodeParser for ProgramParser {
fn parse(&mut self, lex: Lex) -> NodeParseResult { 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 }
}
}
} }
} }