diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2026-01-08 14:56:46 +0100 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2026-01-08 14:56:46 +0100 |
| commit | 255e2f98680457b611e3e2b93e54da32052e6e55 (patch) | |
| tree | 32e2eb22a9d4416c87e825a72fff6a5f9a12c658 /src/main.zig | |
| parent | 8bdc0ba5704dceeab9f636d267feb15fbe9e929e (diff) | |
Fix & clean parser.
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 30 |
1 files changed, 20 insertions, 10 deletions
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(); |
