authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-05-28 19:21:14+00:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-06-04 01:18:45-04:00
log05b677f0c484181bcbd7eb86b41a70b8e508644b
tree7675893eb1a990daaeb2bda97a1b4fec21a704c6
parentce072894a16469aea24fd2060013037ba7411b17

langref: sync grammar with zig-spec repo


1 files changed, 100 insertions(+), 48 deletions(-)

doc/langref.html.in+100-48
...@@ -9748,7 +9748,7 @@ test "expect in release fast mode" {...@@ -9748,7 +9748,7 @@ test "expect in release fast mode" {
9748 to see a command-line usage help menu. This will include project-specific9748 to see a command-line usage help menu. This will include project-specific
9749 options that were declared in the build.zig script.9749 options that were declared in the build.zig script.
9750 </p>9750 </p>
9751 9751
9752 {#header_open|Building an Executable#}9752 {#header_open|Building an Executable#}
9753 <p>This <code>build.zig</code> file is automatically generated9753 <p>This <code>build.zig</code> file is automatically generated
9754 by <code>zig init-exe</code>.</p>9754 by <code>zig init-exe</code>.</p>
...@@ -11112,40 +11112,40 @@ fn readU32Be() u32 {}...@@ -11112,40 +11112,40 @@ fn readU32Be() u32 {}
11112 {#header_close#}11112 {#header_close#}
1111311113
11114 {#header_open|Grammar#}11114 {#header_open|Grammar#}
11115 <pre><code>Root &lt;- skip ContainerMembers eof11115 <pre><code>Root &lt;- skip container_doc_comment? ContainerMembers eof
1111611116
11117# *** Top level ***11117# *** Top level ***
11118ContainerMembers11118ContainerMembers &lt;- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations)
11119 &lt;- TestDecl ContainerMembers11119
11120 / TopLevelComptime ContainerMembers11120ContainerDeclarations
11121 / KEYWORD_pub? TopLevelDecl ContainerMembers11121 &lt;- TestDecl ContainerDeclarations
11122 / ContainerField COMMA ContainerMembers11122 / TopLevelComptime ContainerDeclarations
11123 / ContainerField11123 / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations
11124 /11124 /
1112511125
11126TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block11126TestDecl &lt;- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block
1112711127
11128TopLevelComptime &lt;- KEYWORD_comptime BlockExpr11128TopLevelComptime &lt;- doc_comment? KEYWORD_comptime BlockExpr
1112911129
11130TopLevelDecl11130TopLevelDecl
11131 &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)11131 &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
11132 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl11132 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
11133 / KEYWORD_usingnamespace Expr SEMICOLON11133 / KEYWORD_usingnamespace Expr SEMICOLON
1113411134
11135FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr)11135FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr
1113611136
11137VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON11137VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
1113811138
11139ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)?11139ContainerField &lt;- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)?
1114011140
11141# *** Block Level ***11141# *** Block Level ***
11142Statement11142Statement
11143 &lt;- KEYWORD_comptime? VarDecl11143 &lt;- KEYWORD_comptime? VarDecl
11144 / KEYWORD_comptime BlockExprStatement11144 / KEYWORD_comptime BlockExprStatement
11145 / KEYWORD_nosuspend BlockExprStatement11145 / KEYWORD_nosuspend BlockExprStatement
11146 / KEYWORD_suspend (SEMICOLON / BlockExprStatement)11146 / KEYWORD_suspend BlockExprStatement
11147 / KEYWORD_defer BlockExprStatement11147 / KEYWORD_defer BlockExprStatement
11148 / KEYWORD_errdefer BlockExprStatement11148 / KEYWORD_errdefer Payload? BlockExprStatement
11149 / IfStatement11149 / IfStatement
11150 / LabeledStatement11150 / LabeledStatement
11151 / SwitchExpr11151 / SwitchExpr
...@@ -11278,7 +11278,7 @@ WhileTypeExpr &lt;- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?...@@ -11278,7 +11278,7 @@ WhileTypeExpr &lt;- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
11278SwitchExpr &lt;- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE11278SwitchExpr &lt;- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE
1127911279
11280# *** Assembly ***11280# *** Assembly ***
11281AsmExpr &lt;- KEYWORD_asm KEYWORD_volatile? LPAREN STRINGLITERAL AsmOutput? RPAREN11281AsmExpr &lt;- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN
1128211282
11283AsmOutput &lt;- COLON AsmOutputList AsmInput?11283AsmOutput &lt;- COLON AsmOutputList AsmInput?
1128411284
...@@ -11301,13 +11301,15 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN...@@ -11301,13 +11301,15 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN
1130111301
11302LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN11302LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN
1130311303
11304# Fn specific
11304CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN11305CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN
1130511306
11306ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType11307ParamDecl
11308 &lt;- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
11309 / DOT3
1130711310
11308ParamType11311ParamType
11309 &lt;- KEYWORD_anytype11312 &lt;- KEYWORD_anytype
11310 / DOT3
11311 / TypeExpr11313 / TypeExpr
1131211314
11313# Control flow prefixes11315# Control flow prefixes
...@@ -11397,11 +11399,12 @@ PrefixOp...@@ -11397,11 +11399,12 @@ PrefixOp
11397PrefixTypeOp11399PrefixTypeOp
11398 &lt;- QUESTIONMARK11400 &lt;- QUESTIONMARK
11399 / KEYWORD_anyframe MINUSRARROW11401 / KEYWORD_anyframe MINUSRARROW
11400 / ArrayTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*11402 / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
11401 / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*11403 / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
11404 / ArrayTypeStart
1140211405
11403SuffixOp11406SuffixOp
11404 &lt;- LBRACKET Expr (DOT2 Expr?)? RBRACKET11407 &lt;- LBRACKET Expr (DOT2 (Expr? (COLON Expr)?)?)? RBRACKET
11405 / DOT IDENTIFIER11408 / DOT IDENTIFIER
11406 / DOTASTERISK11409 / DOTASTERISK
11407 / DOTQUESTIONMARK11410 / DOTQUESTIONMARK
...@@ -11409,15 +11412,17 @@ SuffixOp...@@ -11409,15 +11412,17 @@ SuffixOp
11409FnCallArguments &lt;- LPAREN ExprList RPAREN11412FnCallArguments &lt;- LPAREN ExprList RPAREN
1141011413
11411# Ptr specific11414# Ptr specific
11412ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET11415SliceTypeStart &lt;- LBRACKET (COLON Expr)? RBRACKET
1141311416
11414PtrTypeStart11417PtrTypeStart
11415 &lt;- ASTERISK11418 &lt;- ASTERISK
11416 / ASTERISK211419 / ASTERISK2
11417 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET11420 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
1141811421
11422ArrayTypeStart &lt;- LBRACKET Expr (COLON Expr)? RBRACKET
11423
11419# ContainerDecl specific11424# ContainerDecl specific
11420ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE11425ContainerDeclAuto &lt;- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE
1142111426
11422ContainerDeclType11427ContainerDeclType
11423 &lt;- KEYWORD_struct11428 &lt;- KEYWORD_struct
...@@ -11429,7 +11434,7 @@ ContainerDeclType...@@ -11429,7 +11434,7 @@ ContainerDeclType
11429ByteAlign &lt;- KEYWORD_align LPAREN Expr RPAREN11434ByteAlign &lt;- KEYWORD_align LPAREN Expr RPAREN
1143011435
11431# Lists11436# Lists
11432IdentifierList &lt;- (IDENTIFIER COMMA)* IDENTIFIER?11437IdentifierList &lt;- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)?
1143311438
11434SwitchProngList &lt;- (SwitchProng COMMA)* SwitchProng?11439SwitchProngList &lt;- (SwitchProng COMMA)* SwitchProng?
1143511440
...@@ -11445,49 +11450,96 @@ ExprList &lt;- (Expr COMMA)* Expr?...@@ -11445,49 +11450,96 @@ ExprList &lt;- (Expr COMMA)* Expr?
1144511450
11446# *** Tokens ***11451# *** Tokens ***
11447eof &lt;- !.11452eof &lt;- !.
11448eol &lt;- ('\r'? '\n') | eof11453bin &lt;- [01]
11454bin_ &lt;- '_'? bin
11455oct &lt;- [0-7]
11456oct_ &lt;- '_'? oct
11449hex &lt;- [0-9a-fA-F]11457hex &lt;- [0-9a-fA-F]
11450hex_ &lt;- ('_'/hex)11458hex_ &lt;- '_'? hex
11451dec &lt;- [0-9]11459dec &lt;- [0-9]
11452dec_ &lt;- ('_'/dec)11460dec_ &lt;- '_'? dec
1145311461
11454dec_int &lt;- dec (dec_* dec)?11462bin_int &lt;- bin bin_*
11455hex_int &lt;- hex (hex_* dec)?11463oct_int &lt;- oct oct_*
11464dec_int &lt;- dec dec_*
11465hex_int &lt;- hex hex_*
11466
11467ox80_oxBF &lt;- [\200-\277]
11468oxF4 &lt;- '\364'
11469ox80_ox8F &lt;- [\200-\217]
11470oxF1_oxF3 &lt;- [\361-\363]
11471oxF0 &lt;- '\360'
11472ox90_0xBF &lt;- [\220-\277]
11473oxEE_oxEF &lt;- [\356-\357]
11474oxED &lt;- '\355'
11475ox80_ox9F &lt;- [\200-\237]
11476oxE1_oxEC &lt;- [\341-\354]
11477oxE0 &lt;- '\340'
11478oxA0_oxBF &lt;- [\240-\277]
11479oxC2_oxDF &lt;- [\302-\337]
11480
11481# From https://lemire.me/blog/2018/05/09/how-quickly-can-you-check-that-a-string-is-valid-unicode-utf-8/
11482# First Byte Second Byte Third Byte Fourth Byte
11483# [0x00,0x7F]
11484# [0xC2,0xDF] [0x80,0xBF]
11485# 0xE0 [0xA0,0xBF] [0x80,0xBF]
11486# [0xE1,0xEC] [0x80,0xBF] [0x80,0xBF]
11487# 0xED [0x80,0x9F] [0x80,0xBF]
11488# [0xEE,0xEF] [0x80,0xBF] [0x80,0xBF]
11489# 0xF0 [0x90,0xBF] [0x80,0xBF] [0x80,0xBF]
11490# [0xF1,0xF3] [0x80,0xBF] [0x80,0xBF] [0x80,0xBF]
11491# 0xF4 [0x80,0x8F] [0x80,0xBF] [0x80,0xBF]
11492
11493mb_utf8_literal &lt;-
11494 oxF4 ox80_ox8F ox80_oxBF ox80_oxBF
11495 / oxF1_oxF3 ox80_oxBF ox80_oxBF ox80_oxBF
11496 / oxF0 ox90_0xBF ox80_oxBF ox80_oxBF
11497 / oxEE_oxEF ox80_oxBF ox80_oxBF
11498 / oxED ox80_ox9F ox80_oxBF
11499 / oxE1_oxEC ox80_oxBF ox80_oxBF
11500 / oxE0 oxA0_oxBF ox80_oxBF
11501 / oxC2_oxDF ox80_oxBF
11502
11503ascii_char_not_nl_slash_squote &lt;- [\000-\011\013-\046-\050-\133\135-\177]
1145611504
11457char_escape11505char_escape
11458 &lt;- '\\x' hex hex11506 &lt;- &quot;\\x&quot; hex hex
11459 / '\\u{' hex+ '}'11507 / &quot;\\u{&quot; hex+ &quot;}&quot;
11460 / '\\' [nr\\t'&quot;]11508 / &quot;\\&quot; [nr\\t'&quot;]
11461char_char11509char_char
11462 &lt;- char_escape11510 &lt;- mb_utf8_literal
11463 / [^\\'\r\n]11511 / char_escape
11512 / ascii_char_not_nl_slash_squote
11513
11464string_char11514string_char
11465 &lt;- char_escape11515 &lt;- char_escape
11466 / [^\\&quot;\r\n]11516 / [^\\&quot;\n]
1146711517
11468line_comment &lt;- '//'[^\r\n]* eol11518container_doc_comment &lt;- ('//!' [^\n]* [ \n]*)+
11469line_string &lt;- ('\\\\' [^\r\n]* eol skip)+11519doc_comment &lt;- ('///' [^\n]* [ \n]*)+
11470skip &lt;- ([ \t] / eol / line_comment)*11520line_comment &lt;- '//' ![!/][^\n]* / '////' [^\n]*
11521line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+
11522skip &lt;- ([ \n] / line_comment)*
1147111523
11472CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip11524CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip
11473FLOAT11525FLOAT
11474 &lt;- '0x' hex_* hex '.' hex_int ([pP] [-+]? hex_int)? skip11526 &lt;- &quot;0x&quot; hex_int &quot;.&quot; hex_int ([pP] [-+]? dec_int)? skip
11475 / dec_int '.' dec_int ([eE] [-+]? dec_int)? skip11527 / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip
11476 / '0x' hex_* hex '.'? [pP] [-+]? hex_int skip11528 / &quot;0x&quot; hex_int &quot;.&quot;? [pP] [-+]? dec_int skip
11477 / dec_int '.'? [eE] [-+]? dec_int skip11529 / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip
11478INTEGER11530INTEGER
11479 &lt;- '0b' [_01]* [01] skip11531 &lt;- &quot;0b&quot; bin_int skip
11480 / '0o' [_0-7]* [0-7] skip11532 / &quot;0o&quot; oct_int skip
11481 / '0x' hex_* hex skip11533 / &quot;0x&quot; hex_int skip
11482 / dec_int skip11534 / dec_int skip
11483STRINGLITERALSINGLE &lt;- '&quot;' string_char* '&quot;' skip11535STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11484STRINGLITERAL11536STRINGLITERAL
11485 &lt;- STRINGLITERALSINGLE11537 &lt;- STRINGLITERALSINGLE
11486 / line_string skip11538 / (line_string skip)+
11487IDENTIFIER11539IDENTIFIER
11488 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip11540 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip
11489 / '@&quot;' string_char* '&quot;' skip11541 / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11490BUILTINIDENTIFIER &lt;- '@'[A-Za-z_][A-Za-z0-9_]* skip11542BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip
1149111543
1149211544
11493AMPERSAND &lt;- '&amp;' ![=] skip11545AMPERSAND &lt;- '&amp;' ![=] skip