summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig40
1 files changed, 40 insertions, 0 deletions
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();
+}