From c054aad6ed8f374c887f518c02e8af91d4ae72d6 Mon Sep 17 00:00:00 2001 From: Emmanuel BERNAT Date: Wed, 3 Apr 2024 07:56:35 +0200 Subject: [PATCH] =?UTF-8?q?Reconnaissance=20des=20tokens=20de=20deux=20car?= =?UTF-8?q?act=C3=A8res?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rlox/scanner.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/rlox/scanner.rs b/src/rlox/scanner.rs index 36519b6..3e2d943 100644 --- a/src/rlox/scanner.rs +++ b/src/rlox/scanner.rs @@ -12,7 +12,7 @@ struct Scanner { impl Scanner { fn scan_tokens(&mut self) { - while (!self.is_at_end()) { + while !self.is_at_end() { self.start = self.current; self.scan_token(); } @@ -38,7 +38,11 @@ impl Scanner { '+' => self.add_simple_token( TokenType::Plus ), ';' => self.add_simple_token( TokenType::Semicolon ), '*' => self.add_simple_token( TokenType::Star ), - _ => () + '!' => { if self.matchnext('=') { self.add_simple_token( TokenType::BangEqual ) } else { self.add_simple_token( TokenType::Bang ) } }, + '=' => { if self.matchnext('=') { self.add_simple_token( TokenType::EqualEqual ) } else { self.add_simple_token( TokenType::Equal ) } }, + '<' => { if self.matchnext('=') { self.add_simple_token( TokenType::LessEqual ) } else { self.add_simple_token( TokenType::Less ) } }, + '>' => { if self.matchnext('=') { self.add_simple_token( TokenType::GreaterEqual ) } else { self.add_simple_token( TokenType::Greater ) } }, + _ => (), // report error } } @@ -47,6 +51,14 @@ impl Scanner { self.source[self.current] } + fn matchnext(&mut self, expected: char) -> bool { + if self.is_at_end() { return false; } + if self.source[self.current]!=expected { return false; } + + self.current += 1; + true + } + fn add_simple_token(&mut self, t: TokenType) { self.add_token(t, String::from("")); }