diff options
| author | Baitinq <[email protected]> | 2025-04-28 22:12:46 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-04-28 22:12:46 +0200 |
| commit | 8b969bfe7d7e9b98af6c780c567155c699cfe3e5 (patch) | |
| tree | e37cd9b9c8ea36ad869afd0e6e7c0b047456ed8b /src/parser.zig | |
| parent | Bootstrap: Iterate chars (diff) | |
| download | interpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.tar.gz interpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.tar.bz2 interpreter-8b969bfe7d7e9b98af6c780c567155c699cfe3e5.zip | |
Start implementing import functionality import
Diffstat (limited to '')
| -rw-r--r-- | src/parser.zig | 21 |
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()}); |