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(); }