From 7ba140dd736f1da3ed0d13f01ccfcd69e8e6cea6 Mon Sep 17 00:00:00 2001 From: Luna Date: Fri, 23 Aug 2019 15:42:50 -0300 Subject: [PATCH] add better ast printing --- src/ast.zig | 25 +++++++++++++++++++++++++ src/parser.zig | 6 ++++++ src/runner.zig | 5 ++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/ast.zig b/src/ast.zig index 52f25a9..310ce44 100644 --- a/src/ast.zig +++ b/src/ast.zig @@ -43,3 +43,28 @@ pub fn mkRoot(allocator: *std.mem.Allocator) !*Node { node.* = Node{ .Root = NodeList.init(allocator) }; return node; } + +fn print(ident: usize, comptime fmt: []const u8, args: ...) void { + var i: usize = 0; + while (i < ident) : (i += 1) { + std.debug.warn("\t"); + } + + std.debug.warn(fmt, args); +} + +pub fn printNode(node: *Node, ident: usize) void { + switch (node.*) { + .FnDecl => |proto| { + print(ident, "FnDecl name='{}'\n", proto.func_name.lexeme); + }, + .Root => { + for (node.Root.toSlice()) |child| { + printNode(child, ident + 1); + } + }, + else => { + print(ident, "unknown node: {}\n", node); + }, + } +} diff --git a/src/parser.zig b/src/parser.zig index f07ebc3..9ee366d 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -233,6 +233,12 @@ pub const Parser = struct { .Fn => blk: { _ = try self.consumeSingle(.Fn); var name = try self.consumeSingle(.Identifier); + _ = try self.consumeSingle(.LeftParen); + // TODO paramlist + _ = try self.consumeSingle(.RightParen); + _ = try self.consumeSingle(.LeftBrace); + // TODO block + _ = try self.consumeSingle(.RightBrace); std.debug.warn("!fn name: {}\n", name); break :blk try self.mkFnDecl( name, diff --git a/src/runner.zig b/src/runner.zig index e0f6493..34d81d0 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -48,9 +48,8 @@ pub const Runner = struct { var it = root.Root.iterator(); - while (it.next()) |node| { - std.debug.warn("{}\n", node.*); - } + std.debug.warn("parse tree\n"); + ast.printNode(root, 0); return Result.Ok; }