minor refactoring
This commit is contained in:
parent
d2ae2c6057
commit
00dedcc3b4
119
src/parser.rs
119
src/parser.rs
@ -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() => (),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user