Rough outline of something resembling a parser (again...)

This commit is contained in:
Eryn Wells 2017-04-15 21:01:28 -07:00
parent 9f1500c1b6
commit 594b3e44e1
5 changed files with 56 additions and 0 deletions

View file

@ -4,3 +4,5 @@ version = "0.1.0"
authors = ["Eryn Wells <eryn@erynwells.me>"]
[dependencies]
sibillexer = { path = "../lexer" }
sibiltypes = { path = "../types" }

View file

@ -1,3 +1,23 @@
/* parser/src/lib.rs
* Eryn Wells <eryn@erynwells.me>
*/
extern crate sibillexer;
extern crate sibiltypes;
mod list;
mod program;
use sibillexer::Lexer;
struct ParseError { }
type Result<T> = std::result::Result<T, ParseError>;
trait Parsable: Sized {
fn parse(lexer: &Lexer) -> Result<Self>;
}
#[cfg(test)]
mod tests {
#[test]

24
parser/src/list.rs Normal file
View file

@ -0,0 +1,24 @@
/* parser/src/list.rs
* Eryn Wells <eryn@erynwells.me>
*/
extern crate sibillexer;
extern crate sibiltypes;
use sibillexer::Lexer;
use sibillexer::Token;
use sibiltypes::Value;
use super::Parsable;
use super::ParseError;
use super::Result;
pub enum SExpression {
Value(Box<Value>),
List(Vec<SExpression>),
}
impl Parsable for SExpression {
fn parse(lexer: &Lexer) -> Result<SExpression> {
Err(ParseError{ })
}
}

9
parser/src/program.rs Normal file
View file

@ -0,0 +1,9 @@
/* parser/src/program.rs
* Eryn Wells <eryn@erynwells.me>
*/
use list::SExpression;
struct Program {
commands: Vec<SExpression>,
}

View file

@ -6,6 +6,7 @@ mod value;
pub use bool::Bool;
pub use char::Char;
pub use number::Number;
pub use value::Value;
#[cfg(test)]
mod tests {