From 594b3e44e1635a676dfa2fdf0f981465933eb43b Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 15 Apr 2017 21:01:28 -0700 Subject: [PATCH] Rough outline of something resembling a parser (again...) --- parser/Cargo.toml | 2 ++ parser/src/lib.rs | 20 ++++++++++++++++++++ parser/src/list.rs | 24 ++++++++++++++++++++++++ parser/src/program.rs | 9 +++++++++ types/src/lib.rs | 1 + 5 files changed, 56 insertions(+) create mode 100644 parser/src/list.rs create mode 100644 parser/src/program.rs diff --git a/parser/Cargo.toml b/parser/Cargo.toml index 0da3720..1d9ada1 100644 --- a/parser/Cargo.toml +++ b/parser/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" authors = ["Eryn Wells "] [dependencies] +sibillexer = { path = "../lexer" } +sibiltypes = { path = "../types" } diff --git a/parser/src/lib.rs b/parser/src/lib.rs index cdfbe1a..65bcd76 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -1,3 +1,23 @@ +/* parser/src/lib.rs + * Eryn Wells + */ + +extern crate sibillexer; +extern crate sibiltypes; + +mod list; +mod program; + +use sibillexer::Lexer; + +struct ParseError { } + +type Result = std::result::Result; + +trait Parsable: Sized { + fn parse(lexer: &Lexer) -> Result; +} + #[cfg(test)] mod tests { #[test] diff --git a/parser/src/list.rs b/parser/src/list.rs new file mode 100644 index 0000000..125746b --- /dev/null +++ b/parser/src/list.rs @@ -0,0 +1,24 @@ +/* parser/src/list.rs + * Eryn Wells + */ + +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), + List(Vec), +} + +impl Parsable for SExpression { + fn parse(lexer: &Lexer) -> Result { + Err(ParseError{ }) + } +} diff --git a/parser/src/program.rs b/parser/src/program.rs new file mode 100644 index 0000000..80b66e2 --- /dev/null +++ b/parser/src/program.rs @@ -0,0 +1,9 @@ +/* parser/src/program.rs + * Eryn Wells + */ + +use list::SExpression; + +struct Program { + commands: Vec, +} diff --git a/types/src/lib.rs b/types/src/lib.rs index 731c1c7..27dc8f7 100644 --- a/types/src/lib.rs +++ b/types/src/lib.rs @@ -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 {