From 0b859831ad8a0c9df11e8da11f13739ed2dcf0d5 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Mon, 26 Dec 2022 16:35:24 +0200 Subject: [PATCH] update grammar in langref Closes #14072 --- doc/langref.html.in | 63 ++++++++++++++++++++++++++++--------------- lib/std/zig/parse.zig | 8 +++--- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/doc/langref.html.in b/doc/langref.html.in index 7a3c96595..4f39ad72d 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -12062,24 +12062,24 @@ ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerFiel ContainerDeclarations <- TestDecl ContainerDeclarations - / TopLevelComptime ContainerDeclarations - / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations + / ComptimeDecl ContainerDeclarations + / doc_comment? KEYWORD_pub? Decl ContainerDeclarations / -TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block +TestDecl <- KEYWORD_test STRINGLITERALSINGLE? Block -TopLevelComptime <- doc_comment? KEYWORD_comptime BlockExpr +ComptimeDecl <- KEYWORD_comptime Block -TopLevelDecl +Decl <- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block) / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl / KEYWORD_usingnamespace Expr SEMICOLON -FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr +FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? AddrSpace? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr -VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON +VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? AddrSpace? LinkSection? (EQUAL Expr)? SEMICOLON -ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)? +ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)? # *** Block Level *** Statement @@ -12240,6 +12240,8 @@ WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN +AddrSpace <- KEYWORD_addrspace LPAREN Expr RPAREN + # Fn specific CallConv <- KEYWORD_callconv LPAREN Expr RPAREN @@ -12267,7 +12269,7 @@ PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE # Switch specific -SwitchProng <- SwitchCase EQUALRARROW PtrPayload? AssignExpr +SwitchProng <- KEYWORD_inline? SwitchCase EQUALRARROW PtrIndexPayload? AssignExpr SwitchCase <- SwitchItem (COMMA SwitchItem)* COMMA? @@ -12278,11 +12280,15 @@ SwitchItem <- Expr (DOT3 Expr)? # Operators AssignOp <- ASTERISKEQUAL + / ASTERISKPIPEEQUAL / SLASHEQUAL / PERCENTEQUAL / PLUSEQUAL + / PLUSPIPEEQUAL / MINUSEQUAL + / MINUSPIPEEQUAL / LARROW2EQUAL + / LARROW2PIPEEQUAL / RARROW2EQUAL / AMPERSANDEQUAL / CARETEQUAL @@ -12310,6 +12316,7 @@ BitwiseOp BitShiftOp <- LARROW2 / RARROW2 + / LARROW2PIPE AdditionOp <- PLUS @@ -12317,6 +12324,8 @@ AdditionOp / PLUS2 / PLUSPERCENT / MINUSPERCENT + / PLUSPIPE + / MINUSPIPE MultiplyOp <- PIPE2 @@ -12325,6 +12334,7 @@ MultiplyOp / PERCENT / ASTERISK2 / ASTERISKPERCENT + / ASTERISKPIPE PrefixOp <- EXCLAMATIONMARK @@ -12338,8 +12348,8 @@ PrefixOp PrefixTypeOp <- QUESTIONMARK / KEYWORD_anyframe MINUSRARROW - / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* - / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* + / SliceTypeStart (ByteAlign / AddrSpace / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* + / PtrTypeStart (AddrSpace / KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* / ArrayTypeStart SuffixOp @@ -12364,7 +12374,7 @@ ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE ContainerDeclType - <- KEYWORD_struct + <- KEYWORD_struct (LPAREN Expr RPAREN)? / KEYWORD_opaque / KEYWORD_enum (LPAREN Expr RPAREN)? / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)? @@ -12455,7 +12465,7 @@ string_char / [^\\"\n] container_doc_comment <- ('//!' [^\n]* [ \n]*)+ -doc_comment <- ('///' [^\n]* [ \n]*)+ +doc_comment <- ('///' [^\n]* [ \n]*)+ skip line_comment <- '//' ![!/][^\n]* / '////' [^\n]* line_string <- ("\\\\" [^\n]* [ \n]*)+ skip <- ([ \n] / line_comment)* @@ -12483,11 +12493,13 @@ BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip AMPERSAND <- '&' ![=] skip AMPERSANDEQUAL <- '&=' skip -ASTERISK <- '*' ![*%=] skip +ASTERISK <- '*' ![*%=|] skip ASTERISK2 <- '**' skip ASTERISKEQUAL <- '*=' skip ASTERISKPERCENT <- '*%' ![=] skip ASTERISKPERCENTEQUAL <- '*%=' skip +ASTERISKPIPE <- '*|' ![=] skip +ASTERISKPIPEEQUAL <- '*|=' skip CARET <- '^' ![=] skip CARETEQUAL <- '^=' skip COLON <- ':' skip @@ -12503,27 +12515,33 @@ EQUALRARROW <- '=>' skip EXCLAMATIONMARK <- '!' ![=] skip EXCLAMATIONMARKEQUAL <- '!=' skip LARROW <- '<' ![<=] skip -LARROW2 <- '<<' ![=] skip +LARROW2 <- '<<' ![=|] skip LARROW2EQUAL <- '<<=' skip +LARROW2PIPE <- '<<|' ![=] skip +LARROW2PIPEEQUAL <- '<<|=' skip LARROWEQUAL <- '<=' skip LBRACE <- '{' skip LBRACKET <- '[' skip LPAREN <- '(' skip -MINUS <- '-' ![%=>] skip +MINUS <- '-' ![%=>|] skip MINUSEQUAL <- '-=' skip MINUSPERCENT <- '-%' ![=] skip MINUSPERCENTEQUAL <- '-%=' skip +MINUSPIPE <- '-|' ![=] skip +MINUSPIPEEQUAL <- '-|=' skip MINUSRARROW <- '->' skip PERCENT <- '%' ![=] skip PERCENTEQUAL <- '%=' skip PIPE <- '|' ![|=] skip PIPE2 <- '||' skip PIPEEQUAL <- '|=' skip -PLUS <- '+' ![%+=] skip +PLUS <- '+' ![%+=|] skip PLUS2 <- '++' skip PLUSEQUAL <- '+=' skip PLUSPERCENT <- '+%' ![=] skip PLUSPERCENTEQUAL <- '+%=' skip +PLUSPIPE <- '+|' ![=] skip +PLUSPIPEEQUAL <- '+|=' skip LETTERC <- 'c' skip QUESTIONMARK <- '?' skip RARROW <- '>' ![>=] skip @@ -12539,6 +12557,7 @@ SLASHEQUAL <- '/=' skip TILDE <- '~' skip end_of_word <- ![a-zA-Z0-9_] skip +KEYWORD_addrspace <- 'addrspace' end_of_word KEYWORD_align <- 'align' end_of_word KEYWORD_allowzero <- 'allowzero' end_of_word KEYWORD_and <- 'and' end_of_word @@ -12588,11 +12607,11 @@ KEYWORD_var <- 'var' end_of_word KEYWORD_volatile <- 'volatile' end_of_word KEYWORD_while <- 'while' end_of_word -keyword <- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe - / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await - / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime - / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else - / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export +keyword <- KEYWORD_addrspace / KEYWORD_align / KEYWORD_allowzero / KEYWORD_and + / KEYWORD_anyframe / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async + / KEYWORD_await / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch + / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue / KEYWORD_defer + / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 205b094e9..ced4b05ba 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -240,10 +240,10 @@ const Parser = struct { /// ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations) /// ContainerDeclarations /// <- TestDecl ContainerDeclarations - /// / TopLevelComptime ContainerDeclarations - /// / KEYWORD_pub? TopLevelDecl ContainerDeclarations + /// / ComptimeDecl ContainerDeclarations + /// / doc_comment? KEYWORD_pub? Decl ContainerDeclarations /// / - /// TopLevelComptime <- KEYWORD_comptime Block + /// ComptimeDecl <- KEYWORD_comptime Block fn parseContainerMembers(p: *Parser) !Members { const scratch_top = p.scratch.items.len; defer p.scratch.shrinkRetainingCapacity(scratch_top); @@ -622,7 +622,7 @@ const Parser = struct { }; } - /// TopLevelDecl + /// Decl /// <- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block) /// / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl /// / KEYWORD_usingnamespace Expr SEMICOLON