aboutsummaryrefslogtreecommitdiff
path: root/src/Lexer.zig
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2025-07-03 23:00:50 +0200
committerMathias Magnusson <mathias@magnusson.space>2025-07-03 23:00:50 +0200
commit7f86e0dc92670dd5da34cd22c36aba18fa58ec6d (patch)
tree692521deb068563d650a0028874d11dea8cdda31 /src/Lexer.zig
parent3959256af626292d50d5c05c63073ef28d760546 (diff)
downloadhuginn-7f86e0dc92670dd5da34cd22c36aba18fa58ec6d.tar.gz
implement comparisons
Diffstat (limited to 'src/Lexer.zig')
-rw-r--r--src/Lexer.zig20
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;