From 255e2f98680457b611e3e2b93e54da32052e6e55 Mon Sep 17 00:00:00 2001 From: Taylan Kammer Date: Thu, 8 Jan 2026 14:56:46 +0100 Subject: Fix & clean parser. --- src/main.zig | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index 4f1127c..55fecdf 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2,26 +2,36 @@ const std = @import("std"); const zisp = @import("zisp"); -const gst_io = std.Io.Threaded.global_single_threaded.io(); +const alloc = std.heap.smp_allocator; +const gstio = std.Io.Threaded.global_single_threaded.io(); -pub fn main() !void { +pub fn main() !u8 { var stdin_buffer: [4096]u8 = undefined; - var stdin_reader = std.Io.File.stdin().reader(gst_io, &stdin_buffer); + var stdin_reader = std.Io.File.stdin().reader(gstio, &stdin_buffer); const reader = &stdin_reader.interface; var stdout_buffer: [4096]u8 = undefined; - var stdout_writer = std.Io.File.stdout().writer(gst_io, &stdout_buffer); + var stdout_writer = std.Io.File.stdout().writer(gstio, &stdout_buffer); const writer = &stdout_writer.interface; + var sfa = zisp.io.Parser.DefaultSfa.withFallback(alloc); + var p = try zisp.io.Parser.initWithSfa(&sfa, gstio); while (true) { - try writer.writeAll("> "); - try writer.flush(); - const datum = zisp.io.parse.fromReader(reader); + 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)) { - try writer.writeAll("\n"); - return; + return 0; } - try writer.writeAll("= "); try zisp.io.print.toWriter(writer, datum); try writer.writeAll("\n"); try writer.flush(); -- cgit v1.2.3