blob: 6095e81e1a5ae1f6eb5ffc90e7bcf7363edac374 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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();
}
|