diff --git a/parser/src/lib.rs b/parser/src/lib.rs index b4aaf3f..7fa7069 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -5,14 +5,39 @@ extern crate sibillexer; extern crate sibiltypes; -mod program; - -use sibillexer::Lexer; +use std::iter::Peekable; +use sibillexer::Result as LexerResult; use sibiltypes::Object; -struct ParseError { } +pub struct ParseError; -type Result = std::result::Result; +pub type Result = std::result::Result; + +pub struct Parser where T: Iterator { + input: Peekable, +} + +impl Parser where T: Iterator { + pub fn new(input: T) -> Parser { + Parser { input: input.peekable() } + } +} + +impl Iterator for Parser where T: Iterator { + type Item = Result; + + fn next(&mut self) -> Option { + loop { + if let Some(lex) = self.input.next() { + println!("{:?}", lex) + } + else { + break; + } + } + None + } +} #[cfg(test)] mod tests { diff --git a/parser/src/main.rs b/parser/src/main.rs new file mode 100644 index 0000000..17d9d4d --- /dev/null +++ b/parser/src/main.rs @@ -0,0 +1,15 @@ +/* parser/src/main.rs + * Eryn Wells + */ + +extern crate sibillexer; +extern crate sibilparser; + +use sibillexer::Lexer; +use sibilparser::Parser; + +fn main() { + let lexer = Lexer::new("(ab)".chars()); + let parser = Parser::new(lexer); + for thing in parser { } +}