about summary refs log tree commit diff
path: root/src/parser.zig
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-04-28 22:12:46 +0200
committerBaitinq <[email protected]>2025-04-28 22:12:46 +0200
commit8b969bfe7d7e9b98af6c780c567155c699cfe3e5 (patch)
treee37cd9b9c8ea36ad869afd0e6e7c0b047456ed8b /src/parser.zig
parentBootstrap: Iterate chars (diff)
downloadinterpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.tar.gz
interpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.tar.bz2
interpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.zip
Start implementing import functionality import
Diffstat (limited to '')
-rw-r--r--src/parser.zig21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/parser.zig b/src/parser.zig
index 7ed1cb3..ffc8da5 100644
--- a/src/parser.zig
+++ b/src/parser.zig
@@ -19,6 +19,9 @@ pub const Node = union(enum) {
         lhs: *Node,
         rhs: *Node,
     },
+    IMPORT_DECLARATION: struct {
+        filename: []u8,
+    },
     FUNCTION_CALL_STATEMENT: struct {
         expression: *Node,
         arguments: []*Node,
@@ -146,6 +149,7 @@ pub const Parser = struct {
             self.accept_parse(parse_while_statement) orelse
             self.accept_parse(parse_return_statement) orelse
             self.accept_parse(parse_assignment_statement) orelse
+            self.accept_parse(parse_import_declaration) orelse
             try self.parse_extern_declaration();
 
         _ = try self.parse_token(tokenizer.TokenType.SEMICOLON);
@@ -187,6 +191,23 @@ pub const Parser = struct {
         });
     }
 
+    // ImportDeclaration ::= "import" STRING
+    fn parse_import_declaration(self: *Parser) ParserError!*Node {
+        errdefer if (!self.try_context) std.debug.print("Error parsing import declaration {any}\n", .{self.peek_token()});
+
+        _ = try self.parse_token(.IMPORT);
+
+        const expr = try self.parse_primary_expression();
+
+        std.debug.assert(expr.PRIMARY_EXPRESSION == .STRING);
+
+        return self.create_node(.{
+            .IMPORT_DECLARATION = .{
+                .filename = "",
+            },
+        });
+    }
+
     // ExternDeclaration ::= "extern" IDENTIFIER EQUALS Type
     fn parse_extern_declaration(self: *Parser) ParserError!*Node {
         errdefer if (!self.try_context) std.debug.print("Error parsing extern declaration {any}\n", .{self.peek_token()});