diff --git a/parser/src/list.rs b/parser/src/list.rs index 125746b..a69309b 100644 --- a/parser/src/list.rs +++ b/parser/src/list.rs @@ -5,20 +5,17 @@ extern crate sibillexer; extern crate sibiltypes; -use sibillexer::Lexer; -use sibillexer::Token; -use sibiltypes::Value; -use super::Parsable; -use super::ParseError; -use super::Result; +use sibillexer::{Lexer, Token}; +use sibiltypes::{Bool, Char, Number, Value}; +use super::{Parsable, ParseError, Result}; pub enum SExpression { - Value(Box), + Atom(Box), List(Vec), } impl Parsable for SExpression { fn parse(lexer: &Lexer) -> Result { - Err(ParseError{ }) + Ok(SExpression::Atom(Box::new(Number::from_int(3, true)))) } } diff --git a/parser/src/program.rs b/parser/src/program.rs index 80b66e2..a21962b 100644 --- a/parser/src/program.rs +++ b/parser/src/program.rs @@ -2,8 +2,20 @@ * Eryn Wells */ +use sibillexer::Lexer; +use super::Result; +use super::Parsable; +use super::ParseError; use list::SExpression; struct Program { commands: Vec, } + +impl Parsable for Program { + fn parse(lexer: &Lexer) -> Result { + let mut commands: Vec = Vec::new(); + // TODO: Actually parse commands. + Ok(Program { commands: commands }) + } +}