From 1651a99faf86493834b85e94115b3def0c5b87af Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 24 Aug 2019 16:51:37 -0300 Subject: [PATCH 1/2] parser: don't skip tokens on groupings --- src/parser.zig | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/parser.zig b/src/parser.zig index f0f8a70..ddc3011 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -91,10 +91,12 @@ pub const Parser = struct { } fn consumeSingle(self: *Parser, ttype: TokenType) !Token { + std.debug.warn("consume {}..?", ttype); + if (self.check(ttype)) { var cur = self.peek(); _ = try self.nextToken(); - std.debug.warn("consumed {}, now has {}\n", ttype, self.peek()); + std.debug.warn(" now has {}\n", self.peek()); return cur; } @@ -379,6 +381,7 @@ pub const Parser = struct { _ = try self.consumeSingle(.LeftBrace); while (self.peek().ttype != .RightBrace) { + std.debug.warn("get smt with cur {}\n", self.peek().ttype); var node = try self.parseStmt(); ast.printNode(node, 0); try stmts.append(node.Stmt); @@ -509,7 +512,10 @@ pub const Parser = struct { _ = try self.nextToken(); var expr = (try self.parseExpr()).Expr; _ = try self.consume(.RightParen, "Expected ')' after expression"); - break :blk try self.mkGrouping(expr); + + // for groupings, we don't want to skip tokens as we already + // consumed RightParen. + return try self.mkGrouping(expr); }, else => blk: { From 02c2055601508b7e53cad635dfa9f5f5ae354d54 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 24 Aug 2019 16:56:58 -0300 Subject: [PATCH 2/2] parser: make println consume parens --- examples/hello.v | 13 +++++++------ src/parser.zig | 4 ++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/hello.v b/examples/hello.v index 9219a29..8afff20 100644 --- a/examples/hello.v +++ b/examples/hello.v @@ -1,12 +1,13 @@ -//const ( -// Cock = 1 -// Ball = 2 -// Deals = 3 -// Businesses = 4 -//) +const ( + Cock = 1 + Ball = 2 + 3 + Deals = 3 + Businesses = 4 +) fn main(a int) int { 1 + 2 + 3 + 4 1 + 1 * 1 3 / (51 + 2) + println(2 * 1956) } diff --git a/src/parser.zig b/src/parser.zig index ddc3011..75a8e30 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -405,7 +405,11 @@ pub const Parser = struct { fn parsePrintln(self: *@This()) !*Stmt { _ = try self.consumeSingle(.Println); + + _ = try self.consumeSingle(.LeftParen); var expr = try self.parseExpr(); + _ = try self.consumeSingle(.RightParen); + return try Stmt.mkPrintln(self.allocator, expr.Expr); }