diff options
Diffstat (limited to 'src/parser.zig')
| -rw-r--r-- | src/parser.zig | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parser.zig b/src/parser.zig index 6e07491..510726f 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -99,6 +99,7 @@ pub const Node = union(enum) { pub const EqualityExpressionType = enum { EQ, + NE, GE, LE, LT, @@ -409,7 +410,7 @@ pub const Parser = struct { return ParserError.ParsingError; } - // EqualityExpression ::= AdditiveExpression ("==" | "<=" | ">=" | "<" | ">") AdditiveExpression + // EqualityExpression ::= AdditiveExpression ("==" | "!=" | "<=" | ">=" | "<" | ">") AdditiveExpression fn parse_equality_expression(self: *Parser) ParserError!*Node { errdefer if (!self.try_context) std.debug.print("Error parsing equality expression {any}\n", .{self.peek_token()}); @@ -429,6 +430,16 @@ pub const Parser = struct { typ = .EQ; } else if (self.accept_parse(struct { fn parse(iself: *Parser) ParserError!*Node { + _ = try iself.parse_token(tokenizer.TokenType.BANG); + _ = try iself.parse_token(tokenizer.TokenType.EQUALS); + return try iself.create_node(.{ .PROGRAM = .{ + .statements = &[_]*Node{}, + } }); + } + }.parse) != null) { + typ = .NE; + } else if (self.accept_parse(struct { + fn parse(iself: *Parser) ParserError!*Node { _ = try iself.parse_token(tokenizer.TokenType.LESS); _ = try iself.parse_token(tokenizer.TokenType.EQUALS); return try iself.create_node(.{ .PROGRAM = .{ |