diff options
| author | Baitinq <[email protected]> | 2025-01-22 00:30:28 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-01-22 00:30:59 +0100 |
| commit | 774498ff4db405eadd8ce295eb699586ed217f6d (patch) | |
| tree | 106c0926321316cac67d57ea94df8444fd0b3f8f /src/parser.zig | |
| parent | Feature: Add support for division and multiplication (diff) | |
| download | interpreter-774498ff4db405eadd8ce295eb699586ed217f6d.tar.gz interpreter-774498ff4db405eadd8ce295eb699586ed217f6d.tar.bz2 interpreter-774498ff4db405eadd8ce295eb699586ed217f6d.zip | |
Feature: Add support for negation
Diffstat (limited to 'src/parser.zig')
| -rw-r--r-- | src/parser.zig | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/parser.zig b/src/parser.zig index 966cad3..b407c42 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -322,18 +322,19 @@ pub const Parser = struct { return lhs; } - // UnaryExpression ::= "!" UnaryExpression | PrimaryExpression + // UnaryExpression ::= ("!" | "-") UnaryExpression | PrimaryExpression fn parse_unary_expression(self: *Parser) ParserError!*Node { errdefer if (!self.try_context) std.debug.print("Error parsing unary expression\n", .{}); - const negation = self.accept_token(tokenizer.TokenType.BANG) != null; + const not = self.accept_token(tokenizer.TokenType.BANG) != null; + const minus = self.accept_token(tokenizer.TokenType.MINUS) != null; - if (!negation) { + if (!not and !minus) { return try self.parse_primary_expression(); } return self.create_node(.{ .UNARY_EXPRESSION = .{ - .negation = negation, + .negation = not, .expression = try self.parse_unary_expression(), } }); } |