From 62e5257752bd9097e1edde5a7310f35222a40608 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Wed, 8 Jan 2025 22:09:41 +0100 Subject: Parser: Add grammar docs --- src/parser.zig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/parser.zig b/src/parser.zig index d6fb5d9..4e01f44 100644 --- a/src/parser.zig +++ b/src/parser.zig @@ -53,6 +53,7 @@ pub const Parser = struct { return self.parse_program(); } + // Program ::= Statement+ fn parse_program(self: *Parser) !*Node { var nodes = std.ArrayList(*Node).init(self.allocator); defer nodes.deinit(); @@ -67,6 +68,7 @@ pub const Parser = struct { return node; } + // Statement ::= (VariableStatement | PrintStatement) SEMICOLON fn parse_statement(self: *Parser) ParserError!*Node { const token = self.peek_token() orelse return ParserError.ParsingError; @@ -96,6 +98,7 @@ pub const Parser = struct { } } + // VariableStatement ::= ("let" IDENTIFIER | IDENTIFIER) EQUALS Expression fn parse_variable_statement(self: *Parser) ParserError!*Node { const token = self.peek_token() orelse return ParserError.ParsingError; @@ -122,9 +125,8 @@ pub const Parser = struct { return node; } + // PrintStatement :== PRINT LPAREN Expression RPAREN fn parse_print_statement(self: *Parser) ParserError!*Node { - // print + ( + statement + ) + ; - _ = try self.accept_token(tokenizer.TokenType.PRINT); _ = try self.accept_token(tokenizer.TokenType.LPAREN); -- cgit 1.4.1