From 3f8021f3fdd8bbf8187e42e9340734fb806e69ca Mon Sep 17 00:00:00 2001 From: Baitinq Date: Sun, 11 May 2025 19:41:27 +0200 Subject: Feature: Add support for GE and LE comparisons --- src/parser.zig | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/parser.zig') diff --git a/src/parser.zig b/src/parser.zig index d5672d0..0318f26 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -96,6 +96,8 @@ pub const Node = union(enum) { pub const EqualityExpressionType = enum { EQ, + GE, + LE, LT, GT, }; @@ -388,7 +390,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()}); @@ -406,6 +408,26 @@ pub const Parser = struct { } }.parse) != null) { typ = .EQ; + } 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 = .{ + .statements = &[_]*Node{}, + } }); + } + }.parse) != null) { + typ = .LE; + } else if (self.accept_parse(struct { + fn parse(iself: *Parser) ParserError!*Node { + _ = try iself.parse_token(tokenizer.TokenType.GREATER); + _ = try iself.parse_token(tokenizer.TokenType.EQUALS); + return try iself.create_node(.{ .PROGRAM = .{ + .statements = &[_]*Node{}, + } }); + } + }.parse) != null) { + typ = .GE; } else if (self.accept_token(tokenizer.TokenType.LESS) != null) { typ = .LT; } else if (self.accept_token(tokenizer.TokenType.GREATER) != null) { -- cgit 1.4.1