diff options
Diffstat (limited to 'src/Lexer.zig')
-rw-r--r-- | src/Lexer.zig | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/Lexer.zig b/src/Lexer.zig index c938116..4665379 100644 --- a/src/Lexer.zig +++ b/src/Lexer.zig @@ -16,6 +16,10 @@ pub const Token = struct { invalid, eof, identifier, + left_angle, + right_angle, + left_angle_equal, + right_angle_equal, // Keywords let, @@ -79,6 +83,14 @@ fn getNext(self: *Self) Token { '+' => self.create(.plus), '-' => self.create(.minus), '=' => self.create(.equal), + '<' => if (self.eatIfEqual('=')) + self.create(.left_angle_equal) + else + self.create(.left_angle), + '>' => if (self.eatIfEqual('=')) + self.create(.right_angle_equal) + else + self.create(.right_angle), '#' => { while ((self.eatChar() orelse '\n') != '\n') {} self.start = self.pos; @@ -134,6 +146,14 @@ fn create(self: *Self, ty: Token.Type) Token { return .{ .loc = .{ .start = start, .end = self.pos }, .type = ty }; } +fn eatIfEqual(self: *Self, char: u8) bool { + if (self.peekChar() == char) { + _ = self.eatChar(); + return true; + } + return false; +} + fn eatChar(self: *Self) ?u8 { const token = self.peekChar(); if (token != null) self.pos += 1; |