about summary refs log tree commit diff
path: root/src/parser.zig
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-05-11 19:41:27 +0200
committerBaitinq <[email protected]>2025-05-11 19:41:27 +0200
commit3f8021f3fdd8bbf8187e42e9340734fb806e69ca (patch)
treeea85d0db1724bd22733230d169af5f7645b6aedf /src/parser.zig
parentBootstrap: cleanup (diff)
downloadpry-lang-3f8021f3fdd8bbf8187e42e9340734fb806e69ca.tar.gz
pry-lang-3f8021f3fdd8bbf8187e42e9340734fb806e69ca.tar.bz2
pry-lang-3f8021f3fdd8bbf8187e42e9340734fb806e69ca.zip
Feature: Add support for GE and LE comparisons
Diffstat (limited to 'src/parser.zig')
-rw-r--r--src/parser.zig24
1 files changed, 23 insertions, 1 deletions
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) {