minor refactoring

This commit is contained in:
Lukáš Hozda 2017-10-14 19:46:22 +02:00
parent d2ae2c6057
commit 00dedcc3b4

View File

@ -67,9 +67,7 @@ impl Error for ParseError {
} }
} }
fn cause(&self) -> Option<&Error> { fn cause(&self) -> Option<&Error> { None }
None
}
} }
impl fmt::Display for ParseError { impl fmt::Display for ParseError {
@ -299,8 +297,8 @@ impl<'a> Iterator for TokenIterator<'a> {
while let Some(&nxt) = self.char_stream.peek() { while let Some(&nxt) = self.char_stream.peek() {
match nxt { match nxt {
'0'...'9' | 'A'...'Z' | 'a'...'z' | '_' => { x if x.is_alphanumeric() || x == '_' => {
result.push(nxt); result.push(x);
self.char_stream.next(); self.char_stream.next();
} }
_ => break, _ => break,
@ -309,26 +307,17 @@ impl<'a> Iterator for TokenIterator<'a> {
let out: String = result.iter().cloned().collect(); let out: String = result.iter().cloned().collect();
if out == "true" { match out.as_ref() {
return Some(Token::True); "true" => return Some(Token::True),
} else if out == "false" { "false" => return Some(Token::False),
return Some(Token::False); "let" => return Some(Token::Var),
} else if out == "let" { "if" => return Some(Token::If),
return Some(Token::Var); "else" => return Some(Token::Else),
} else if out == "if" { "while" => return Some(Token::While),
return Some(Token::If); "break" => return Some(Token::Break),
} else if out == "else" { "return" => return Some(Token::Return),
return Some(Token::Else); "fn" => return Some(Token::Fn),
} else if out == "while" { x => return Some(Token::Identifier(x.to_string()))
return Some(Token::While);
} else if out == "break" {
return Some(Token::Break);
} else if out == "return" {
return Some(Token::Return);
} else if out == "fn" {
return Some(Token::Fn);
} else {
return Some(Token::Identifier(out));
} }
} }
'"' => { '"' => {
@ -355,57 +344,27 @@ impl<'a> Iterator for TokenIterator<'a> {
Err(e) => return Some(Token::LexErr(e)), Err(e) => return Some(Token::LexErr(e)),
} }
} }
'{' => { '{' => return Some(Token::LCurly),
return Some(Token::LCurly); '}' => return Some(Token::RCurly),
} '(' => return Some(Token::LParen),
'}' => { ')' => return Some(Token::RParen),
return Some(Token::RCurly); '[' => return Some(Token::LSquare),
} ']' => return Some(Token::RSquare),
'(' => { '+' => return Some(Token::Plus),
return Some(Token::LParen); '-' => return Some(Token::Minus),
} '*' => return Some(Token::Multiply),
')' => { '/' => return Some(Token::Divide),
return Some(Token::RParen); ';' => return Some(Token::Semicolon),
} ':' => return Some(Token::Colon),
'[' => { ',' => return Some(Token::Comma),
return Some(Token::LSquare); '.' => return Some(Token::Period),
}
']' => {
return Some(Token::RSquare);
}
'+' => {
return Some(Token::Plus);
}
'-' => {
return Some(Token::Minus);
}
'*' => {
return Some(Token::Multiply);
}
'/' => {
return Some(Token::Divide);
}
';' => {
return Some(Token::Semicolon);
}
':' => {
return Some(Token::Colon);
}
',' => {
return Some(Token::Comma);
}
'.' => {
return Some(Token::Period);
}
'=' => { '=' => {
match self.char_stream.peek() { match self.char_stream.peek() {
Some(&'=') => { Some(&'=') => {
self.char_stream.next(); self.char_stream.next();
return Some(Token::EqualTo); return Some(Token::EqualTo);
} }
_ => { _ => return Some(Token::Equals),
return Some(Token::Equals);
}
} }
} }
'<' => { '<' => {
@ -414,9 +373,7 @@ impl<'a> Iterator for TokenIterator<'a> {
self.char_stream.next(); self.char_stream.next();
return Some(Token::LessThanEqual); return Some(Token::LessThanEqual);
} }
_ => { _ => return Some(Token::LessThan),
return Some(Token::LessThan);
}
} }
} }
'>' => { '>' => {
@ -425,9 +382,7 @@ impl<'a> Iterator for TokenIterator<'a> {
self.char_stream.next(); self.char_stream.next();
return Some(Token::GreaterThanEqual); return Some(Token::GreaterThanEqual);
} }
_ => { _ => return Some(Token::GreaterThan),
return Some(Token::GreaterThan);
}
} }
} }
'!' => { '!' => {
@ -436,9 +391,7 @@ impl<'a> Iterator for TokenIterator<'a> {
self.char_stream.next(); self.char_stream.next();
return Some(Token::NotEqualTo); return Some(Token::NotEqualTo);
} }
_ => { _ => return Some(Token::Bang),
return Some(Token::Bang);
}
} }
} }
'|' => { '|' => {
@ -447,9 +400,7 @@ impl<'a> Iterator for TokenIterator<'a> {
self.char_stream.next(); self.char_stream.next();
return Some(Token::Or); return Some(Token::Or);
} }
_ => { _ => return Some(Token::Pipe),
return Some(Token::Pipe);
}
} }
} }
'&' => { '&' => {
@ -458,9 +409,7 @@ impl<'a> Iterator for TokenIterator<'a> {
self.char_stream.next(); self.char_stream.next();
return Some(Token::And); return Some(Token::And);
} }
_ => { _ => return Some(Token::Ampersand),
return Some(Token::Ampersand);
}
} }
} }
_x if _x.is_whitespace() => (), _x if _x.is_whitespace() => (),