Lex true/false as 1/0

This commit is contained in:
Daniel M 2022-01-28 14:55:10 +01:00
parent 6816392173
commit 1f1f589dd4

View File

@ -123,6 +123,23 @@ impl<'a> Lexer<'a> {
'(' => tokens.push(Token::LParen),
')' => tokens.push(Token::RParen),
'a'..='z' | 'A'..='Z' | '_' => {
let mut ident = String::from(ch);
// Do as long as a next char exists and it is a valid ident char
while let Some('a'..='z' | 'A'..='Z' | '_' | '0'..='9') = self.peek() {
// The next char is verified to be Some, so unwrap is safe
ident.push(self.next().unwrap());
}
match ident.as_str() {
"true" => tokens.push(Token::I64(1)),
"false" => tokens.push(Token::I64(0)),
_ => panic!("Lexer encountered unknown ident: '{}'", ident),
}
}
//TODO: Don't panic, keep calm
_ => panic!("Lexer encountered unexpected char: '{}'", ch),
}