sibil/parser/src/sym_parser.rs

33 lines
930 B
Rust
Raw Normal View History

/* parser/src/sym_parser.rs
* Eryn Wells <eryn@erynwells.me>
*/
use sibillexer::{Lex, Token};
use sibiltypes::{Obj, Sym};
use node_parser::{NodeParser, NodeParseResult};
#[derive(Debug)]
pub struct SymParser;
impl NodeParser for SymParser {
fn parse(&mut self, lex: &Lex) -> NodeParseResult {
match lex.token() {
Token::Id => {
let value = String::from(lex.value());
// Initializing with Sym(value) caused E0423. So use this isntead.
let obj = Obj::new(Sym::new(value));
NodeParseResult::Complete { obj: obj }
}
_ => {
2018-08-24 08:26:08 -07:00
let msg = format!("Expected symbol, found {:?}", lex);
NodeParseResult::error(msg)
}
}
}
2018-08-24 08:26:08 -07:00
fn none(&mut self) -> NodeParseResult {
let msg = format!("Expected symbol, found EOF");
NodeParseResult::Error { msg }
}
}