Add an error class
This commit is contained in:
parent
b5f76deb98
commit
1dfdc001b3
2 changed files with 24 additions and 4 deletions
16
lexer/src/error.rs
Normal file
16
lexer/src/error.rs
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* lexer/src/error.rs
|
||||
* Eryn Wells <eryn@erynwells.me>
|
||||
*/
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Error {
|
||||
message: String
|
||||
}
|
||||
|
||||
impl Error {
|
||||
pub fn new(msg: String) -> Error {
|
||||
Error {
|
||||
message: msg
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,6 +4,10 @@
|
|||
|
||||
use std::iter::Peekable;
|
||||
|
||||
mod error;
|
||||
|
||||
pub use error::Error;
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum Token { LeftParen, RightParen, Id(String), }
|
||||
|
||||
|
@ -15,7 +19,7 @@ enum IterationResult {
|
|||
Finish,
|
||||
Continue,
|
||||
Emit(Token, Resume),
|
||||
Error(String),
|
||||
Error(Error),
|
||||
}
|
||||
|
||||
pub struct Lexer<T> where T: Iterator<Item=char> {
|
||||
|
@ -32,12 +36,12 @@ impl<T> Lexer<T> where T: Iterator<Item=char> {
|
|||
}
|
||||
|
||||
fn fail(&self, msg: String) -> IterationResult {
|
||||
IterationResult::Error(msg)
|
||||
IterationResult::Error(Error::new(msg))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Iterator for Lexer<T> where T: Iterator<Item=char> {
|
||||
type Item = Result<Token, String>;
|
||||
type Item = Result<Token, Error>;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
let mut buffer = String::new();
|
||||
|
@ -81,7 +85,7 @@ impl<T> Iterator for Lexer<T> where T: Iterator<Item=char> {
|
|||
}
|
||||
return Some(Ok(token))
|
||||
},
|
||||
IterationResult::Error(msg) => return Some(Err(msg)),
|
||||
IterationResult::Error(err) => return Some(Err(err)),
|
||||
};
|
||||
}
|
||||
None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue