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" {
97489748 to see a command-line usage help menu. This will include project-specific
97499749 options that were declared in the build.zig script.
97509750 </p>
9751
9751
97529752 {#header_open|Building an Executable#}
97539753 <p>This <code>build.zig</code> file is automatically generated
97549754 by <code>zig init-exe</code>.</p>
......@@ -11112,40 +11112,40 @@ fn readU32Be() u32 {}
1111211112 {#header_close#}
1111311113
1111411114 {#header_open|Grammar#}
11115 <pre><code>Root &lt;- skip ContainerMembers eof
11115 <pre><code>Root &lt;- skip container_doc_comment? ContainerMembers eof
1111611116
1111711117# *** Top level ***
11118ContainerMembers
11119 &lt;- TestDecl ContainerMembers
11120 / TopLevelComptime ContainerMembers
11121 / KEYWORD_pub? TopLevelDecl ContainerMembers
11122 / ContainerField COMMA ContainerMembers
11123 / ContainerField
11118ContainerMembers &lt;- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations)
11119
11120ContainerDeclarations
11121 &lt;- TestDecl ContainerDeclarations
11122 / TopLevelComptime ContainerDeclarations
11123 / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations
1112411124 /
1112511125
11126TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block
11126TestDecl &lt;- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block
1112711127
11128TopLevelComptime &lt;- KEYWORD_comptime BlockExpr
11128TopLevelComptime &lt;- doc_comment? KEYWORD_comptime BlockExpr
1112911129
1113011130TopLevelDecl
1113111131 &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
1113211132 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
1113311133 / 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
1113711137VarDecl &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
1114111141# *** Block Level ***
1114211142Statement
1114311143 &lt;- KEYWORD_comptime? VarDecl
1114411144 / KEYWORD_comptime BlockExprStatement
1114511145 / KEYWORD_nosuspend BlockExprStatement
11146 / KEYWORD_suspend (SEMICOLON / BlockExprStatement)
11146 / KEYWORD_suspend BlockExprStatement
1114711147 / KEYWORD_defer BlockExprStatement
11148 / KEYWORD_errdefer BlockExprStatement
11148 / KEYWORD_errdefer Payload? BlockExprStatement
1114911149 / IfStatement
1115011150 / LabeledStatement
1115111151 / SwitchExpr
......@@ -11278,7 +11278,7 @@ WhileTypeExpr &lt;- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
1127811278SwitchExpr &lt;- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE
1127911279
1128011280# *** Assembly ***
11281AsmExpr &lt;- KEYWORD_asm KEYWORD_volatile? LPAREN STRINGLITERAL AsmOutput? RPAREN
11281AsmExpr &lt;- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN
1128211282
1128311283AsmOutput &lt;- COLON AsmOutputList AsmInput?
1128411284
......@@ -11301,13 +11301,15 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN
1130111301
1130211302LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN
1130311303
11304# Fn specific
1130411305CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN
1130511306
11306ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
11307ParamDecl
11308 &lt;- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
11309 / DOT3
1130711310
1130811311ParamType
1130911312 &lt;- KEYWORD_anytype
11310 / DOT3
1131111313 / TypeExpr
1131211314
1131311315# Control flow prefixes
......@@ -11397,11 +11399,12 @@ PrefixOp
1139711399PrefixTypeOp
1139811400 &lt;- QUESTIONMARK
1139911401 / KEYWORD_anyframe MINUSRARROW
11400 / ArrayTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
11402 / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
1140111403 / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
11404 / ArrayTypeStart
1140211405
1140311406SuffixOp
11404 &lt;- LBRACKET Expr (DOT2 Expr?)? RBRACKET
11407 &lt;- LBRACKET Expr (DOT2 (Expr? (COLON Expr)?)?)? RBRACKET
1140511408 / DOT IDENTIFIER
1140611409 / DOTASTERISK
1140711410 / DOTQUESTIONMARK
......@@ -11409,15 +11412,17 @@ SuffixOp
1140911412FnCallArguments &lt;- LPAREN ExprList RPAREN
1141011413
1141111414# Ptr specific
11412ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET
11415SliceTypeStart &lt;- LBRACKET (COLON Expr)? RBRACKET
1141311416
1141411417PtrTypeStart
1141511418 &lt;- ASTERISK
1141611419 / ASTERISK2
1141711420 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
1141811421
11422ArrayTypeStart &lt;- LBRACKET Expr (COLON Expr)? RBRACKET
11423
1141911424# ContainerDecl specific
11420ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE
11425ContainerDeclAuto &lt;- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE
1142111426
1142211427ContainerDeclType
1142311428 &lt;- KEYWORD_struct
......@@ -11429,7 +11434,7 @@ ContainerDeclType
1142911434ByteAlign &lt;- KEYWORD_align LPAREN Expr RPAREN
1143011435
1143111436# Lists
11432IdentifierList &lt;- (IDENTIFIER COMMA)* IDENTIFIER?
11437IdentifierList &lt;- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)?
1143311438
1143411439SwitchProngList &lt;- (SwitchProng COMMA)* SwitchProng?
1143511440
......@@ -11445,49 +11450,96 @@ ExprList &lt;- (Expr COMMA)* Expr?
1144511450
1144611451# *** Tokens ***
1144711452eof &lt;- !.
11448eol &lt;- ('\r'? '\n') | eof
11453bin &lt;- [01]
11454bin_ &lt;- '_'? bin
11455oct &lt;- [0-7]
11456oct_ &lt;- '_'? oct
1144911457hex &lt;- [0-9a-fA-F]
11450hex_ &lt;- ('_'/hex)
11458hex_ &lt;- '_'? hex
1145111459dec &lt;- [0-9]
11452dec_ &lt;- ('_'/dec)
11453
11454dec_int &lt;- dec (dec_* dec)?
11455hex_int &lt;- hex (hex_* dec)?
11460dec_ &lt;- '_'? dec
11461
11462bin_int &lt;- bin bin_*
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
1145711505char_escape
11458 &lt;- '\\x' hex hex
11459 / '\\u{' hex+ '}'
11460 / '\\' [nr\\t'&quot;]
11506 &lt;- &quot;\\x&quot; hex hex
11507 / &quot;\\u{&quot; hex+ &quot;}&quot;
11508 / &quot;\\&quot; [nr\\t'&quot;]
1146111509char_char
11462 &lt;- char_escape
11463 / [^\\'\r\n]
11510 &lt;- mb_utf8_literal
11511 / char_escape
11512 / ascii_char_not_nl_slash_squote
11513
1146411514string_char
1146511515 &lt;- char_escape
11466 / [^\\&quot;\r\n]
11516 / [^\\&quot;\n]
1146711517
11468line_comment &lt;- '//'[^\r\n]* eol
11469line_string &lt;- ('\\\\' [^\r\n]* eol skip)+
11470skip &lt;- ([ \t] / eol / line_comment)*
11518container_doc_comment &lt;- ('//!' [^\n]* [ \n]*)+
11519doc_comment &lt;- ('///' [^\n]* [ \n]*)+
11520line_comment &lt;- '//' ![!/][^\n]* / '////' [^\n]*
11521line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+
11522skip &lt;- ([ \n] / line_comment)*
1147111523
1147211524CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip
1147311525FLOAT
11474 &lt;- '0x' hex_* hex '.' hex_int ([pP] [-+]? hex_int)? skip
11475 / dec_int '.' dec_int ([eE] [-+]? dec_int)? skip
11476 / '0x' hex_* hex '.'? [pP] [-+]? hex_int skip
11477 / dec_int '.'? [eE] [-+]? dec_int skip
11526 &lt;- &quot;0x&quot; hex_int &quot;.&quot; hex_int ([pP] [-+]? dec_int)? skip
11527 / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip
11528 / &quot;0x&quot; hex_int &quot;.&quot;? [pP] [-+]? dec_int skip
11529 / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip
1147811530INTEGER
11479 &lt;- '0b' [_01]* [01] skip
11480 / '0o' [_0-7]* [0-7] skip
11481 / '0x' hex_* hex skip
11531 &lt;- &quot;0b&quot; bin_int skip
11532 / &quot;0o&quot; oct_int skip
11533 / &quot;0x&quot; hex_int skip
1148211534 / dec_int skip
11483STRINGLITERALSINGLE &lt;- '&quot;' string_char* '&quot;' skip
11535STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip
1148411536STRINGLITERAL
1148511537 &lt;- STRINGLITERALSINGLE
11486 / line_string skip
11538 / (line_string skip)+
1148711539IDENTIFIER
1148811540 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip
11489 / '@&quot;' string_char* '&quot;' skip
11490BUILTINIDENTIFIER &lt;- '@'[A-Za-z_][A-Za-z0-9_]* skip
11541 / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11542BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip
1149111543
1149211544
1149311545AMPERSAND &lt;- '&amp;' ![=] skip