commit 5519e71d3d80c86abed101e1a8a1a937af92f9a2
parent 54d57c45f0609c5f656271a7ec1fe3628e2ea8fb
Author: Walther Chen <walther.chen@gmail.com>
Date: Fri, 4 Nov 2022 00:28:33 -0400
initial scaffold, start interpret
Diffstat:
2 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
@@ -1 +1,2 @@
zig-*
+test.bz
diff --git a/src/main.zig b/src/main.zig
@@ -1,7 +1,46 @@
const std = @import("std");
+const ArrayList = std.ArrayList;
+
+const MEMORY_SIZE = 10; //30000;
pub fn main() anyerror!void {
- std.log.info("All your codebase are belong to us.", .{});
+ var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
+ defer arena.deinit();
+ const alloc = arena.allocator();
+
+ var args = std.process.args();
+ _ = args.skip();
+ const source_path = args.next() orelse return error.MissingSourcePathArg;
+ std.debug.print("source path: {s}\n", .{source_path});
+ const f = try std.fs.cwd().openFile(source_path, .{});
+ defer f.close();
+
+ const src = try f.readToEndAlloc(alloc, 2048);
+ std.debug.print("{s}", .{src});
+
+ try interpret(src);
+}
+
+fn interpret(src: []const u8) !void {
+ var memory = [_]u8{0} ** MEMORY_SIZE;
+
+ var pc: usize = 0;
+ var dataptr: usize = 0;
+
+ while (pc < src.len) {
+ const instruction = src[pc];
+
+ switch (instruction) {
+ '>' => dataptr += 1,
+ '<' => dataptr -= 1,
+ '+' => memory[dataptr] += 1,
+ '-' => memory[dataptr] -= 1,
+ else => {},
+ }
+ std.debug.print("{any}\n", .{memory});
+
+ pc += 1;
+ }
}
test "basic test" {