summaryrefslogtreecommitdiff
path: root/src/tokenize.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokenize.zig')
-rw-r--r--src/tokenize.zig28
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().? != '>') {