From 8b969bfe7d7e9b98af6c780c567155c699cfe3e5 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Mon, 28 Apr 2025 22:12:46 +0200 Subject: Start implementing import functionality --- src/parser.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/parser.zig') 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()}); -- cgit 1.4.1