Reconnaissance des tokens de deux caractères

This commit is contained in:
2024-04-03 07:56:35 +02:00
parent 63d9addfc4
commit c054aad6ed

View File

@@ -12,7 +12,7 @@ struct Scanner {
impl Scanner { impl Scanner {
fn scan_tokens(&mut self) { fn scan_tokens(&mut self) {
while (!self.is_at_end()) { while !self.is_at_end() {
self.start = self.current; self.start = self.current;
self.scan_token(); self.scan_token();
} }
@@ -38,7 +38,11 @@ impl Scanner {
'+' => self.add_simple_token( TokenType::Plus ), '+' => self.add_simple_token( TokenType::Plus ),
';' => self.add_simple_token( TokenType::Semicolon ), ';' => self.add_simple_token( TokenType::Semicolon ),
'*' => self.add_simple_token( TokenType::Star ), '*' => 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] 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) { fn add_simple_token(&mut self, t: TokenType) {
self.add_token(t, String::from("")); self.add_token(t, String::from(""));
} }