const std = @import("std"); const zisp = @import("zisp"); pub fn main() !u8 { const alloc = std.heap.smp_allocator; const io = std.Io.Threaded.global_single_threaded.io(); var stdin_buffer: [4096]u8 = undefined; var stdin_reader = std.Io.File.stdin().reader(io, &stdin_buffer); const reader = &stdin_reader.interface; var stdout_buffer: [4096]u8 = undefined; var stdout_writer = std.Io.File.stdout().writer(io, &stdout_buffer); const writer = &stdout_writer.interface; var p, const sfa = try zisp.io.Parser.init(alloc, io); defer p.deinit(sfa); while (true) { const datum = p.run(reader) catch { const format = "Parse error: {s}, pos: {d}, unread_char: {s}\n"; const err = p.err_msg; const pos = stdin_reader.logicalPos(); const unread: [4]u8 = if (p.unread_char) |c| "0x".* ++ std.fmt.hex(c) else "none".*; std.debug.print(format, .{ err, pos, unread }); return 1; }; if (datum.eq(zisp.value.eof)) { return 0; } try zisp.io.print.toWriter(writer, datum); try writer.writeAll("\n"); try writer.flush(); } }