From 52de06c3b0720223a8ee2d337152df9e214388f8 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Thu, 21 Aug 2025 10:33:48 +0200 Subject: [PATCH] langref: sync with zig-spec grammar.peg --- doc/langref.html.in | 52 +++++++++++++++++++++---------------------- lib/std/zig/Parse.zig | 8 +++---- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/doc/langref.html.in b/doc/langref.html.in index e8950c54f0..417d7e2956 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -7804,11 +7804,11 @@ fn readU32Be() u32 {} {#header_close#} {#header_open|Grammar#} - {#syntax_block|peg|grammar.y#} -Root <- skip container_doc_comment? ContainerMembers eof + {#syntax_block|peg|grammar.peg#} +Root <- skip ContainerMembers eof # *** Top level *** -ContainerMembers <- ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*) +ContainerMembers <- container_doc_comment? ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*) ContainerDeclaration <- TestDecl / ComptimeDecl / doc_comment? KEYWORD_pub? Decl @@ -7837,7 +7837,6 @@ Statement / KEYWORD_errdefer Payload? BlockExprStatement / IfStatement / LabeledStatement - / SwitchExpr / VarDeclExprStatement ComptimeStatement @@ -7848,7 +7847,7 @@ IfStatement <- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )? / IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement ) -LabeledStatement <- BlockLabel? (Block / LoopStatement) +LabeledStatement <- BlockLabel? (Block / LoopStatement / SwitchExpr) LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement) @@ -7902,7 +7901,7 @@ PrimaryExpr / KEYWORD_break BreakLabel? Expr? / KEYWORD_comptime Expr / KEYWORD_nosuspend Expr - / KEYWORD_continue BreakLabel? + / KEYWORD_continue BreakLabel? Expr? / KEYWORD_resume Expr / KEYWORD_return Expr? / BlockLabel? LoopExpr @@ -7952,7 +7951,6 @@ PrimaryTypeExpr / KEYWORD_anyframe / KEYWORD_unreachable / STRINGLITERAL - / SwitchExpr ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto @@ -7965,6 +7963,7 @@ IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr)? LabeledTypeExpr <- BlockLabel Block / BlockLabel? LoopTypeExpr + / BlockLabel? SwitchExpr LoopTypeExpr <- KEYWORD_inline? (ForTypeExpr / WhileTypeExpr) @@ -8134,7 +8133,7 @@ PtrTypeStart ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET # ContainerDecl specific -ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE +ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE ContainerDeclType <- KEYWORD_struct (LPAREN Expr RPAREN)? @@ -8154,8 +8153,6 @@ AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem? AsmInputList <- (AsmInputItem COMMA)* AsmInputItem? -StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL? - ParamDeclList <- (ParamDecl COMMA)* ParamDecl? ExprList <- (Expr COMMA)* Expr? @@ -8202,7 +8199,7 @@ oxC2_oxDF <- [\302-\337] # [0xF1,0xF3] [0x80,0xBF] [0x80,0xBF] [0x80,0xBF] # 0xF4 [0x80,0x8F] [0x80,0xBF] [0x80,0xBF] -mb_utf8_literal <- +multibyte_utf8 <- oxF4 ox80_ox8F ox80_oxBF ox80_oxBF / oxF1_oxF3 ox80_oxBF ox80_oxBF ox80_oxBF / oxF0 ox90_0xBF ox80_oxBF ox80_oxBF @@ -8212,46 +8209,47 @@ mb_utf8_literal <- / oxE0 oxA0_oxBF ox80_oxBF / oxC2_oxDF ox80_oxBF -ascii_char_not_nl_slash_squote <- [\000-\011\013-\046\050-\133\135-\177] +non_control_ascii <- [\040-\176] char_escape <- "\\x" hex hex / "\\u{" hex+ "}" / "\\" [nr\\t'"] char_char - <- mb_utf8_literal + <- multibyte_utf8 / char_escape - / ascii_char_not_nl_slash_squote + / ![\\'\n] non_control_ascii string_char - <- char_escape - / [^\\"\n] + <- multibyte_utf8 + / char_escape + / ![\\"\n] non_control_ascii container_doc_comment <- ('//!' [^\n]* [ \n]* skip)+ doc_comment <- ('///' [^\n]* [ \n]* skip)+ line_comment <- '//' ![!/][^\n]* / '////' [^\n]* -line_string <- ("\\\\" [^\n]* [ \n]*)+ +line_string <- ('\\\\' [^\n]* [ \n]*)+ skip <- ([ \n] / line_comment)* -CHAR_LITERAL <- "'" char_char "'" skip +CHAR_LITERAL <- ['] char_char ['] skip FLOAT - <- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)? skip - / dec_int "." dec_int ([eE] [-+]? dec_int)? skip - / "0x" hex_int [pP] [-+]? dec_int skip + <- '0x' hex_int '.' hex_int ([pP] [-+]? dec_int)? skip + / dec_int '.' dec_int ([eE] [-+]? dec_int)? skip + / '0x' hex_int [pP] [-+]? dec_int skip / dec_int [eE] [-+]? dec_int skip INTEGER - <- "0b" bin_int skip - / "0o" oct_int skip - / "0x" hex_int skip + <- '0b' bin_int skip + / '0o' oct_int skip + / '0x' hex_int skip / dec_int skip -STRINGLITERALSINGLE <- "\"" string_char* "\"" skip +STRINGLITERALSINGLE <- ["] string_char* ["] skip STRINGLITERAL <- STRINGLITERALSINGLE / (line_string skip)+ IDENTIFIER <- !keyword [A-Za-z_] [A-Za-z0-9_]* skip - / "@" STRINGLITERALSINGLE -BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip + / '@' STRINGLITERALSINGLE +BUILTINIDENTIFIER <- '@'[A-Za-z_][A-Za-z0-9_]* skip AMPERSAND <- '&' ![=] skip diff --git a/lib/std/zig/Parse.zig b/lib/std/zig/Parse.zig index 428442c825..47834681c1 100644 --- a/lib/std/zig/Parse.zig +++ b/lib/std/zig/Parse.zig @@ -188,7 +188,7 @@ fn failMsg(p: *Parse, msg: Ast.Error) error{ ParseError, OutOfMemory } { return error.ParseError; } -/// Root <- skip container_doc_comment? ContainerMembers eof +/// Root <- skip ContainerMembers eof pub fn parseRoot(p: *Parse) !void { // Root node must be index 0. p.nodes.appendAssumeCapacity(.{ @@ -227,7 +227,7 @@ pub fn parseZon(p: *Parse) !void { p.nodes.items(.data)[0] = .{ .node = node_index }; } -/// ContainerMembers <- ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*) +/// ContainerMembers <- container_doc_comment? ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*) /// /// ContainerDeclaration <- TestDecl / ComptimeDecl / doc_comment? KEYWORD_pub? Decl /// @@ -2423,7 +2423,7 @@ fn parseSuffixExpr(p: *Parse) !?Node.Index { /// /// ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto /// -/// ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE +/// ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE /// /// InitList /// <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE @@ -3317,7 +3317,7 @@ fn parseSuffixOp(p: *Parse, lhs: Node.Index) !?Node.Index { /// Caller must have already verified the first token. /// -/// ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE +/// ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE /// /// ContainerDeclType /// <- KEYWORD_struct (LPAREN Expr RPAREN)?