[parser] Fill out ProgramParser
This commit is contained in:
parent
80bf4b7bf1
commit
4bade1af4a
1 changed files with 18 additions and 2 deletions
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue