diff --git a/examples/hello.v b/examples/hello.v index c0aba91..8afff20 100644 --- a/examples/hello.v +++ b/examples/hello.v @@ -9,5 +9,5 @@ fn main(a int) int { 1 + 2 + 3 + 4 1 + 1 * 1 3 / (51 + 2) - println(2 * 1956 + a) + println(2 * 1956) } diff --git a/src/ast.zig b/src/ast.zig index d206807..1f40672 100644 --- a/src/ast.zig +++ b/src/ast.zig @@ -58,31 +58,18 @@ pub const Expr = union(enum) { Binary: BinaryExpr, Unary: UnaryExpr, Literal: LiteralExpr, - Variable: Token, Grouping: *Expr, }; -pub const VarDecl = struct { - name: Token, - initializer: *Expr, -}; - pub const Stmt = union(enum) { Expr: *Expr, Println: *Expr, - VarDecl: VarDecl, pub fn mkPrintln(allocator: *std.mem.Allocator, expr: *Expr) !*Stmt { var println = try allocator.create(Stmt); println.* = Stmt{ .Println = expr }; return println; } - - pub fn mkVarDecl(allocator: *std.mem.Allocator, name: Token, init: *Expr) !*Stmt { - var vardecl = try allocator.create(Stmt); - vardecl.* = Stmt{ .VarDecl = VarDecl{ .name = name, .initializer = init } }; - return vardecl; - } }; pub const Node = union(NodeType) { @@ -162,9 +149,20 @@ pub fn printNode(node: *Node, ident: usize) void { }, .Stmt => |stmt| blk: { - printIdent(ident); - printStmt(stmt); - std.debug.warn("\n"); + switch (stmt.*) { + .Println => |expr| blk2: { + printIdent(ident); + std.debug.warn("println("); + printExpr(expr); + std.debug.warn("\n"); + }, + + .Expr => |expr| { + printIdent(ident); + printExpr(expr); + std.debug.warn("\n"); + }, + } }, else => { @@ -199,9 +197,7 @@ pub fn printExpr(expr: *Expr) void { } }, - .Variable => |token| std.debug.warn("{}", token.lexeme), - - else => std.debug.warn("UnknownExpr-{}", @tagName(expr.*)), + else => std.debug.warn("unknown"), } } @@ -209,7 +205,5 @@ pub fn printStmt(stmt: *Stmt) void { switch (stmt.*) { .Println => |expr| parenthetize("println", &[_]*Expr{expr}), .Expr => |expr| printExpr(expr), - - else => std.debug.warn("STMT_UNKNOWN"), } } diff --git a/src/parser.zig b/src/parser.zig index e74eb19..75a8e30 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -240,13 +240,6 @@ pub const Parser = struct { return expr; } - fn mkVariable(self: *Parser, variable: Token) !*ast.Expr { - var expr = try self.allocator.create(Expr); - expr.* = Expr{ .Variable = variable }; - - return expr; - } - pub fn parse(self: *Parser) !*ast.Node { self.tokens = try self.allocator.alloc(Token, 0); var root = try ast.mkRoot(self.allocator); @@ -518,7 +511,6 @@ pub const Parser = struct { .Integer => try self.mkInteger(lexeme), .Float => try self.mkFloat(lexeme), .String => try self.mkString(lexeme), - .Identifier => try self.mkVariable(self.peek()), .LeftParen => blk: { _ = try self.nextToken();