From 4525c22af916bf40ba0eea223d10740c837d275b Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 19 Oct 2022 12:31:52 -0700 Subject: [PATCH] assume utf-8 --- rust/src/compiler.rs | 2 +- rust/src/scanner.rs | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/rust/src/compiler.rs b/rust/src/compiler.rs index 0899064..71ceefe 100644 --- a/rust/src/compiler.rs +++ b/rust/src/compiler.rs @@ -6,7 +6,7 @@ pub fn compile(source: &str) -> Result<()> { let mut line = None; loop { - let token = scanner.scan()?; + let token = scanner.scan(); if Some(token.line) != line { print!("{:4} ", token.line); line = Some(token.line); diff --git a/rust/src/scanner.rs b/rust/src/scanner.rs index 9091760..6017646 100644 --- a/rust/src/scanner.rs +++ b/rust/src/scanner.rs @@ -15,7 +15,7 @@ impl<'a> Scanner<'a> { } } - pub fn scan(&mut self) -> Result { + pub fn scan(&mut self) -> Token { self.skip_whitespace(); if self.peek().is_none() { @@ -69,20 +69,20 @@ impl<'a> Scanner<'a> { } } - fn make_token(&self, kind: TokenKind) -> Result { - Ok(Token { + fn make_token(&self, kind: TokenKind) -> Token { + Token { kind, - value: std::str::from_utf8(&self.source[..self.current])?, + value: std::str::from_utf8(&self.source[..self.current]).unwrap(), line: self.line, - }) + } } - fn error_token(&self, message: &'static str) -> Result { - Ok(Token { + fn error_token(&self, message: &'static str) -> Token { + Token { kind: TokenKind::Error, value: message, line: self.line, - }) + } } fn advance(&mut self) -> char { @@ -135,7 +135,7 @@ impl<'a> Scanner<'a> { self.source.get(self.current + 1).map(|&x| x as char) } - fn string(&mut self) -> Result { + fn string(&mut self) -> Token { while matches!(self.peek(), Some(c) if c != '"') { if self.peek() == Some('\n') { self.line += 1; @@ -152,7 +152,7 @@ impl<'a> Scanner<'a> { self.make_token(TokenKind::String) } - fn number(&mut self) -> Result { + fn number(&mut self) -> Token { while matches!(self.peek(), Some(c) if c.is_ascii_digit()) { self.advance(); } @@ -168,7 +168,7 @@ impl<'a> Scanner<'a> { self.make_token(TokenKind::Number) } - fn identifier(&mut self) -> Result { + fn identifier(&mut self) -> Token { while matches!(self.peek(), Some(c) if is_alpha(c) || c.is_ascii_digit()) { self.advance(); } @@ -318,7 +318,7 @@ mod tests { } fn assert_scan(scanner: &mut Scanner, kind: TokenKind) { - let token = scanner.scan().unwrap(); + let token = scanner.scan(); assert_eq!(token.kind, kind); } }