From 117be1e9f9c2e353694b40e0eb686b2621317063 Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Sun, 25 Jan 2026 20:14:54 -0600 Subject: Initial commit with tokenizer --- src/main.zig | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main.zig (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..6095e81 --- /dev/null +++ b/src/main.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +const tok = @import("tokenizer.zig"); + +pub fn main() !void { + const inneralloc = std.heap.smp_allocator; + var arena = std.heap.ArenaAllocator.init(inneralloc); + defer arena.deinit(); + const alloc = arena.allocator(); + + var outbuff: [64]u8 = undefined; + var inbuff: [64]u8 = undefined; + var stdout_writer = std.fs.File.stdout().writer(&outbuff); + var stdin_reader = std.fs.File.stdin().reader(&inbuff); + const stdout = &stdout_writer.interface; + const stdin = &stdin_reader.interface; + + var sb = try std.ArrayList(u8).initCapacity(alloc, 1024); + defer sb.deinit(alloc); + + var line = std.io.Writer.Allocating.init(alloc); + defer line.deinit(); + + while (true) { + _ = stdin.streamDelimiter(&line.writer, '\n') catch |err| { + if (err == error.EndOfStream) break else return err; + }; + try sb.appendSlice(alloc, line.written()); + try sb.appendSlice(alloc, try stdin.take(1)); + line.clearRetainingCapacity(); + } + if (line.written().len > 0) try sb.appendSlice(alloc, line.written()); + + std.debug.print("INPUT\n==========\n{s}\n==========\n", .{sb.items}); + + const tokens = try tok.tokenize(alloc, sb.items); + std.debug.print("{any}\n", .{tokens}); + for (tokens) |t| + try stdout.print("{s}\n", .{ try t.print(alloc) }); + try stdout.flush(); +} -- cgit v1.2.3