From f4f1fe1fbc16ba4d2793ce8c07f1c26f2233e1b6 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 1 Jun 2019 16:54:15 -0300 Subject: [PATCH] scanner: add whitespace handling --- src/new_scanner.zig | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/new_scanner.zig b/src/new_scanner.zig index 24e305c..0c97647 100644 --- a/src/new_scanner.zig +++ b/src/new_scanner.zig @@ -68,9 +68,30 @@ pub const Scanner = struct { } } - pub fn scanToken(self: *Scanner) !tokens.Token { - self.start = self.current; + fn peek(self: *Scanner) u8 { + if (self.isAtEnd()) return 0; + return self.source[self.current]; + } + fn skipWhitespace(self: *Scanner) void { + while (true) { + var c = self.peek(); + switch (c) { + ' ', '\r', '\t' => blk: { + _ = self.advance(); + }, + '\n' => blk: { + self.line += 1; + _ = self.advance(); + }, + else => return, + } + } + } + + pub fn scanToken(self: *Scanner) !tokens.Token { + self.skipWhitespace(); + self.start = self.current; if (self.isAtEnd()) return self.makeToken(TokenType.EOF); var c = self.advance();