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:
M.gitignore | 1+
Msrc/main.zig | 41++++++++++++++++++++++++++++++++++++++++-
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" {