diff options
Diffstat (limited to 'src/tokenize.zig')
| -rw-r--r-- | src/tokenize.zig | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/tokenize.zig b/src/tokenize.zig index b578b22..2c536db 100644 --- a/src/tokenize.zig +++ b/src/tokenize.zig @@ -14,6 +14,7 @@ pub const TokenType = enum { intLit, charLit, // Keywords + ifstmt, constant, variable, exit, @@ -26,6 +27,9 @@ pub const TokenType = enum { slash, semiCol, equal, + eqleql, + lessthan, + greaterthan, // Symbols openBrace, closeBrace, @@ -33,9 +37,9 @@ pub const TokenType = enum { closeParen, openBracket, closeBracket, + arrow, colon, comma, - arrow, }; pub const Token = union(TokenType) { @@ -45,6 +49,7 @@ pub const Token = union(TokenType) { intLit: i32, charLit: u8, // Keywords + ifstmt, constant, variable, exit, @@ -57,6 +62,9 @@ pub const Token = union(TokenType) { slash, semiCol, equal, + eqleql, + lessthan, + greaterthan, // Symbols openBrace, closeBrace, @@ -64,12 +72,13 @@ pub const Token = union(TokenType) { closeParen, openBracket, closeBracket, + arrow, colon, comma, - arrow, pub fn fromChar(char: u8) !Token { return switch (char) { + ',' => .comma, '+' => .plus, '-' => .minus, '*' => .star, @@ -80,10 +89,11 @@ pub const Token = union(TokenType) { '}' => .closeBrace, '(' => .openParen, ')' => .closeParen, + '<' => .lessthan, + '>' => .greaterthan, + ':' => .colon, '[' => .openBracket, ']' => .closeBracket, - ':' => .colon, - ',' => .comma, else => { // std.debug.print("{c}: ", .{char}); return TokenizeError.UnknownToken; @@ -97,6 +107,7 @@ pub const Token = union(TokenType) { if (eql(u8, str, "const")) return .constant; if (eql(u8, str, "varbl")) return .variable; if (eql(u8, str, "fn")) return .fun; + if (eql(u8, str, "if")) return .ifstmt; if (eql(u8, str, "import")) return .import; return Token{ .ident = str }; } @@ -186,6 +197,15 @@ pub const Tokenizer = struct { while (self.src.peek()) |char| { try switch (char) { + '=' => { + self.src.skip(); + if (self.src.peek().? != '=') { + try self.toks.append(.equal); + continue; + } + self.src.skip(); + try self.toks.append(.eqleql); + }, '-' => { self.src.skip(); if (self.src.peek().? != '>') { |
