From de077d10359a3bed5259b766c37c94c1d7678a2b Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Wed, 15 Apr 2026 12:48:54 +0200 Subject: feat(lexer): simple separator --- src/lexer/lexed.zig | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/lexer/lexed.zig (limited to 'src/lexer/lexed.zig') diff --git a/src/lexer/lexed.zig b/src/lexer/lexed.zig new file mode 100644 index 0000000..3134705 --- /dev/null +++ b/src/lexer/lexed.zig @@ -0,0 +1,47 @@ +const std = @import("std"); +const Allocator = std.mem.Allocator; + +pub const Kind = enum { + literal, + delimiter, + operator, + + const Self = @This(); + + pub fn string(self: *Self) []const u8 { + switch (*self) { + .literal => return "literal", + .delimiter => return "delimiter", + .operator => return "operator", + } + } +}; + +pub const Lexed = struct { + allocator: Allocator, + kind: Kind, + content: std.ArrayList(u8), + + const Self = @This(); + + pub fn init(alloc: Allocator, kind: Kind, content: std.ArrayList(u8)) Lexed { + return Lexed{ + .allocator = alloc, + .kind = kind, + .content = content, + }; + } + + pub fn deinit(self: *Self) void { + self.content.deinit(self.allocator); + } + + pub fn clone(self: *const Self, alloc: Allocator) Allocator.Error!std.ArrayList(u8) { + return self.content.clone(alloc); + } + + pub fn equals(self: *const Self, kind: Kind, content: []const u8) bool { + if (self.kind != kind) return false; + return std.mem.eql(u8, self.content.items, content); + } +}; -- cgit v1.2.3