about summary refs log tree commit diff
path: root/src/parser.zig
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-04-06 16:17:22 +0200
committerBaitinq <[email protected]>2025-04-06 16:17:22 +0200
commitbd42f4899d09c8f6317ae1af1747ae5b6ac81650 (patch)
treeed21afbbcca7f0be0751e4bf7104bf7cdc9f36e6 /src/parser.zig
parentCodegen: Fix GEP type (diff)
downloadinterpreter-bd42f4899d09c8f6317ae1af1747ae5b6ac81650.tar.gz
interpreter-bd42f4899d09c8f6317ae1af1747ae5b6ac81650.tar.bz2
interpreter-bd42f4899d09c8f6317ae1af1747ae5b6ac81650.zip
Feature: Add char type and support underlying pointer values
Diffstat (limited to 'src/parser.zig')
-rw-r--r--src/parser.zig10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/parser.zig b/src/parser.zig
index 4f607be..7ed1cb3 100644
--- a/src/parser.zig
+++ b/src/parser.zig
@@ -57,6 +57,9 @@ pub const Node = union(enum) {
         BOOLEAN: struct {
             value: bool,
         },
+        CHAR: struct {
+            value: u8,
+        },
         STRING: struct {
             value: []const u8,
         },
@@ -429,7 +432,7 @@ pub const Parser = struct {
         } });
     }
 
-    // PrimaryExpression ::= NUMBER | BOOLEAN | STRING | IDENTIFIER | FunctionCallStatement | FunctionDefinition | LPAREN Expression RPAREN
+    // PrimaryExpression ::= NUMBER | BOOLEAN | CHAR | STRING | IDENTIFIER | FunctionCallStatement | FunctionDefinition | LPAREN Expression RPAREN
     fn parse_primary_expression(self: *Parser) ParserError!*Node {
         errdefer if (!self.try_context) std.debug.print("Error parsing primary expression {any}\n", .{self.peek_token()});
 
@@ -458,6 +461,11 @@ pub const Parser = struct {
                     .value = boolean_token,
                 } },
             }),
+            .CHAR => |char_token| try self.create_node(.{
+                .PRIMARY_EXPRESSION = .{ .CHAR = .{
+                    .value = char_token,
+                } },
+            }),
             .STRING => |string_token| try self.create_node(.{
                 .PRIMARY_EXPRESSION = .{ .STRING = .{
                     .value = try self.arena.dupe(u8, string_token),