From 1f1f589dd43ad9ede24beb12be3a257ba4570861 Mon Sep 17 00:00:00 2001 From: Daniel M Date: Fri, 28 Jan 2022 14:55:10 +0100 Subject: [PATCH] Lex true/false as 1/0 --- src/lexer.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lexer.rs b/src/lexer.rs index 994ba27..22afe1b 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -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), }