vig/src/ast.zig

36 lines
689 B
Zig

const std = @import("std");
const tokens = @import("tokens.zig");
const Token = tokens.Token;
pub const NodeList = std.ArrayList(*Node);
pub const ParamList = std.ArrayList(*ParamDecl);
pub const NodeType = enum {
Root,
FnDecl,
};
pub const ParamDecl = struct {
param_name: Token,
// TODO types
param_type: Token,
};
pub const FnDecl = struct {
func_name: Token,
params: ParamList,
body: NodeList,
};
pub const Node = union(NodeType) {
Root: NodeList,
FnDecl: FnDecl,
};
pub fn mkRoot(allocator: *std.mem.Allocator) !*Node {
var node = try allocator.create(Node);
node.* = Node{ .Root = NodeList.init(allocator) };
return node;
}