authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-11-22 21:15:12+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-11-22 21:30:09+02:00
log98d5bfbd4d21e99363a0a68ef5a0d0104c302ecb
tree72054da66b60a355470f2d5d50f4a8cd5f522cfc
parent2fbe9519acec0d7b9c9dcc41a877fec912337124
signature Commit is signed but in an unrecognized format.

update grammar in langref


2 files changed, 58 insertions(+), 47 deletions(-)

doc/langref.html.in+54-42
...@@ -11042,15 +11042,15 @@ TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block...@@ -11042,15 +11042,15 @@ TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block
11042TopLevelComptime &lt;- KEYWORD_comptime BlockExpr11042TopLevelComptime &lt;- KEYWORD_comptime BlockExpr
1104311043
11044TopLevelDecl11044TopLevelDecl
11045 &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / KEYWORD_inline)? FnProto (SEMICOLON / Block)11045 &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
11046 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl11046 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
11047 / KEYWORD_usingnamespace Expr SEMICOLON11047 / KEYWORD_usingnamespace Expr SEMICOLON
1104811048
11049FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr)11049FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr)
1105011050
11051VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON11051VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
1105211052
11053ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr)? (EQUAL Expr)?11053ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)?
1105411054
11055# *** Block Level ***11055# *** Block Level ***
11056Statement11056Statement
...@@ -11090,7 +11090,7 @@ BlockExpr &lt;- BlockLabel? Block...@@ -11090,7 +11090,7 @@ BlockExpr &lt;- BlockLabel? Block
11090# *** Expression Level ***11090# *** Expression Level ***
11091AssignExpr &lt;- Expr (AssignOp Expr)?11091AssignExpr &lt;- Expr (AssignOp Expr)?
1109211092
11093Expr &lt;- KEYWORD_try* BoolOrExpr11093Expr &lt;- BoolOrExpr
1109411094
11095BoolOrExpr &lt;- BoolAndExpr (KEYWORD_or BoolAndExpr)*11095BoolOrExpr &lt;- BoolAndExpr (KEYWORD_or BoolAndExpr)*
1109611096
...@@ -11215,6 +11215,8 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN...@@ -11215,6 +11215,8 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN
1121511215
11216LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN11216LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN
1121711217
11218CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN
11219
11218ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType11220ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
1121911221
11220ParamType11222ParamType
...@@ -11321,19 +11323,20 @@ SuffixOp...@@ -11321,19 +11323,20 @@ SuffixOp
11321FnCallArguments &lt;- LPAREN ExprList RPAREN11323FnCallArguments &lt;- LPAREN ExprList RPAREN
1132211324
11323# Ptr specific11325# Ptr specific
11324ArrayTypeStart &lt;- LBRACKET Expr? RBRACKET11326ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET
1132511327
11326PtrTypeStart11328PtrTypeStart
11327 &lt;- ASTERISK11329 &lt;- ASTERISK
11328 / ASTERISK211330 / ASTERISK2
11329 / PTRUNKNOWN11331 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
11330 / PTRC
1133111332
11332# ContainerDecl specific11333# ContainerDecl specific
11333ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE11334ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE
1133411335
11335ContainerDeclType11336ContainerDeclType
11336 &lt;- (KEYWORD_struct / KEYWORD_enum / KEYWORD_opaque) (LPAREN Expr RPAREN)?11337 &lt;- KEYWORD_struct
11338 / KEYWORD_opaque
11339 / KEYWORD_enum (LPAREN Expr RPAREN)?
11337 / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?11340 / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
1133811341
11339# Alignment11342# Alignment
...@@ -11357,44 +11360,51 @@ ExprList &lt;- (Expr COMMA)* Expr?...@@ -11357,44 +11360,51 @@ ExprList &lt;- (Expr COMMA)* Expr?
11357# *** Tokens ***11360# *** Tokens ***
11358eof &lt;- !.11361eof &lt;- !.
11359hex &lt;- [0-9a-fA-F]11362hex &lt;- [0-9a-fA-F]
11363hex_ &lt;- ('_'/hex)
11364dec &lt;- [0-9]
11365dec_ &lt;- ('_'/dec)
11366
11367dec_int &lt;- dec (dec_* dec)?
11368hex_int &lt;- hex (hex_* dec)?
11369
11360char_escape11370char_escape
11361 &lt;- "\\x" hex hex11371 &lt;- &quot;\\x&quot; hex hex
11362 / "\\u{" hex+ "}"11372 / &quot;\\u{&quot; hex+ &quot;}&quot;
11363 / "\\" [nr\\t'"]11373 / &quot;\\&quot; [nr\\t'&quot;]
11364char_char11374char_char
11365 &lt;- char_escape11375 &lt;- char_escape
11366 / [^\\'\n]11376 / [^\\'\n]
11367string_char11377string_char
11368 &lt;- char_escape11378 &lt;- char_escape
11369 / [^\\"\n]11379 / [^\\&quot;\n]
1137011380
11371line_comment &lt;- '//'[^\n]*11381line_comment &lt;- '//'[^\n]*
11372line_string &lt;- ("\\\\" [^\n]* [ \n]*)+11382line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+
11373skip &lt;- ([ \n] / line_comment)*11383skip &lt;- ([ \n] / line_comment)*
1137411384
11375CHAR_LITERAL &lt;- "'" char_char "'" skip11385CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip
11376FLOAT11386FLOAT
11377 &lt;- "0x" hex+ "." hex+ ([pP] [-+]? hex+)? skip11387 &lt;- &quot;0x&quot; hex_* hex &quot;.&quot; hex_int ([pP] [-+]? hex_int)? skip
11378 / [0-9]+ "." [0-9]+ ([eE] [-+]? [0-9]+)? skip11388 / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip
11379 / "0x" hex+ "."? [pP] [-+]? hex+ skip11389 / &quot;0x&quot; hex_* hex &quot;.&quot;? [pP] [-+]? hex_int skip
11380 / [0-9]+ "."? [eE] [-+]? [0-9]+ skip11390 / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip
11381INTEGER11391INTEGER
11382 &lt;- "0b" [01]+ skip11392 &lt;- &quot;0b&quot; [_01]* [01] skip
11383 / "0o" [0-7]+ skip11393 / &quot;0o&quot; [_0-7]* [0-7] skip
11384 / "0x" hex+ skip11394 / &quot;0x&quot; hex_* hex skip
11385 / [0-9]+ skip11395 / dec_int skip
11386STRINGLITERALSINGLE &lt;- "\"" string_char* "\"" skip11396STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11387STRINGLITERAL11397STRINGLITERAL
11388 &lt;- STRINGLITERALSINGLE11398 &lt;- STRINGLITERALSINGLE
11389 / line_string skip11399 / line_string skip
11390IDENTIFIER11400IDENTIFIER
11391 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip11401 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip
11392 / "@\"" string_char* "\"" skip11402 / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11393BUILTINIDENTIFIER &lt;- "@"[A-Za-z_][A-Za-z0-9_]* skip11403BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip
1139411404
1139511405
11396AMPERSAND &lt;- '&' ![=] skip11406AMPERSAND &lt;- '&amp;' ![=] skip
11397AMPERSANDEQUAL &lt;- '&=' skip11407AMPERSANDEQUAL &lt;- '&amp;=' skip
11398ASTERISK &lt;- '*' ![*%=] skip11408ASTERISK &lt;- '*' ![*%=] skip
11399ASTERISK2 &lt;- '**' skip11409ASTERISK2 &lt;- '**' skip
11400ASTERISKEQUAL &lt;- '*=' skip11410ASTERISKEQUAL &lt;- '*=' skip
...@@ -11419,7 +11429,7 @@ LARROW2 &lt;- '&lt;&lt;' ![=] skip...@@ -11419,7 +11429,7 @@ LARROW2 &lt;- '&lt;&lt;' ![=] skip
11419LARROW2EQUAL &lt;- '&lt;&lt;=' skip11429LARROW2EQUAL &lt;- '&lt;&lt;=' skip
11420LARROWEQUAL &lt;- '&lt;=' skip11430LARROWEQUAL &lt;- '&lt;=' skip
11421LBRACE &lt;- '{' skip11431LBRACE &lt;- '{' skip
11422LBRACKET &lt;- '[' ![*] skip11432LBRACKET &lt;- '[' skip
11423LPAREN &lt;- '(' skip11433LPAREN &lt;- '(' skip
11424MINUS &lt;- '-' ![%=&gt;] skip11434MINUS &lt;- '-' ![%=&gt;] skip
11425MINUSEQUAL &lt;- '-=' skip11435MINUSEQUAL &lt;- '-=' skip
...@@ -11436,8 +11446,7 @@ PLUS2 &lt;- '++' skip...@@ -11436,8 +11446,7 @@ PLUS2 &lt;- '++' skip
11436PLUSEQUAL &lt;- '+=' skip11446PLUSEQUAL &lt;- '+=' skip
11437PLUSPERCENT &lt;- '+%' ![=] skip11447PLUSPERCENT &lt;- '+%' ![=] skip
11438PLUSPERCENTEQUAL &lt;- '+%=' skip11448PLUSPERCENTEQUAL &lt;- '+%=' skip
11439PTRC &lt;- '[*c]' skip11449LETTERC &lt;- 'c' skip
11440PTRUNKNOWN &lt;- '[*]' skip
11441QUESTIONMARK &lt;- '?' skip11450QUESTIONMARK &lt;- '?' skip
11442RARROW &lt;- '&gt;' ![&gt;=] skip11451RARROW &lt;- '&gt;' ![&gt;=] skip
11443RARROW2 &lt;- '&gt;&gt;' ![=] skip11452RARROW2 &lt;- '&gt;&gt;' ![=] skip
...@@ -11461,6 +11470,7 @@ KEYWORD_asm &lt;- 'asm' end_of_word...@@ -11461,6 +11470,7 @@ KEYWORD_asm &lt;- 'asm' end_of_word
11461KEYWORD_async &lt;- 'async' end_of_word11470KEYWORD_async &lt;- 'async' end_of_word
11462KEYWORD_await &lt;- 'await' end_of_word11471KEYWORD_await &lt;- 'await' end_of_word
11463KEYWORD_break &lt;- 'break' end_of_word11472KEYWORD_break &lt;- 'break' end_of_word
11473KEYWORD_callconv &lt;- 'callconv' end_of_word
11464KEYWORD_catch &lt;- 'catch' end_of_word11474KEYWORD_catch &lt;- 'catch' end_of_word
11465KEYWORD_comptime &lt;- 'comptime' end_of_word11475KEYWORD_comptime &lt;- 'comptime' end_of_word
11466KEYWORD_const &lt;- 'const' end_of_word11476KEYWORD_const &lt;- 'const' end_of_word
...@@ -11479,6 +11489,7 @@ KEYWORD_if &lt;- 'if' end_of_word...@@ -11479,6 +11489,7 @@ KEYWORD_if &lt;- 'if' end_of_word
11479KEYWORD_inline &lt;- 'inline' end_of_word11489KEYWORD_inline &lt;- 'inline' end_of_word
11480KEYWORD_noalias &lt;- 'noalias' end_of_word11490KEYWORD_noalias &lt;- 'noalias' end_of_word
11481KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word11491KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word
11492KEYWORD_noinline &lt;- 'noinline' end_of_word
11482KEYWORD_null &lt;- 'null' end_of_word11493KEYWORD_null &lt;- 'null' end_of_word
11483KEYWORD_opaque &lt;- 'opaque' end_of_word11494KEYWORD_opaque &lt;- 'opaque' end_of_word
11484KEYWORD_or &lt;- 'or' end_of_word11495KEYWORD_or &lt;- 'or' end_of_word
...@@ -11503,19 +11514,20 @@ KEYWORD_var &lt;- 'var' end_of_word...@@ -11503,19 +11514,20 @@ KEYWORD_var &lt;- 'var' end_of_word
11503KEYWORD_volatile &lt;- 'volatile' end_of_word11514KEYWORD_volatile &lt;- 'volatile' end_of_word
11504KEYWORD_while &lt;- 'while' end_of_word11515KEYWORD_while &lt;- 'while' end_of_word
1150511516
11506keyword &lt;- KEYWORD_align / KEYWORD_and / KEYWORD_anyframe / KEYWORD_anytype11517keyword &lt;- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe
11507 / KEYWORD_allowzero / KEYWORD_asm / KEYWORD_async / KEYWORD_await / KEYWORD_break11518 / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await
11508 / KEYWORD_catch / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue11519 / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime
11509 / KEYWORD_defer / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer11520 / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else
11510 / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_false11521 / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export
11511 / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline11522 / KEYWORD_extern / KEYWORD_false / KEYWORD_fn / KEYWORD_for / KEYWORD_if
11512 / KEYWORD_noalias / KEYWORD_null / KEYWORD_opaque / KEYWORD_or11523 / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
11513 / KEYWORD_orelse / KEYWORD_packed / KEYWORD_pub11524 / KEYWORD_null / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
11514 / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection11525 / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
11515 / KEYWORD_struct / KEYWORD_suspend11526 / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch
11516 / KEYWORD_switch / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try11527 / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
11517 / KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable11528 / KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable
11518 / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while</code></pre>11529 / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while
11530</code></pre>
11519 {#header_close#}11531 {#header_close#}
11520 {#header_open|Zen#}11532 {#header_open|Zen#}
11521 <ul>11533 <ul>
lib/std/zig/parse.zig+4-5
...@@ -488,7 +488,7 @@ const Parser = struct {...@@ -488,7 +488,7 @@ const Parser = struct {
488 return &node.base;488 return &node.base;
489 }489 }
490490
491 /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr)491 /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr)
492 fn parseFnProto(p: *Parser, level: enum { top_level, as_type }, fields: struct {492 fn parseFnProto(p: *Parser, level: enum { top_level, as_type }, fields: struct {
493 doc_comments: ?*Node.DocComment = null,493 doc_comments: ?*Node.DocComment = null,
494 visib_token: ?TokenIndex = null,494 visib_token: ?TokenIndex = null,
...@@ -1023,7 +1023,7 @@ const Parser = struct {...@@ -1023,7 +1023,7 @@ const Parser = struct {
1023 return p.parseBinOpExpr(parseAssignOp, parseExpr, .Once);1023 return p.parseBinOpExpr(parseAssignOp, parseExpr, .Once);
1024 }1024 }
10251025
1026 /// Expr <- KEYWORD_try* BoolOrExpr1026 /// Expr <- BoolOrExpr
1027 fn parseExpr(p: *Parser) Error!?*Node {1027 fn parseExpr(p: *Parser) Error!?*Node {
1028 return p.parsePrefixOpExpr(parseTry, parseBoolOrExpr);1028 return p.parsePrefixOpExpr(parseTry, parseBoolOrExpr);
1029 }1029 }
...@@ -2758,7 +2758,7 @@ const Parser = struct {...@@ -2758,7 +2758,7 @@ const Parser = struct {
2758 rparen: TokenIndex,2758 rparen: TokenIndex,
2759 };2759 };
27602760
2761 /// ArrayTypeStart <- LBRACKET Expr? RBRACKET2761 /// ArrayTypeStart <- LBRACKET Expr? (COLON Expr)? RBRACKET
2762 fn parseArrayTypeStart(p: *Parser) !?*Node {2762 fn parseArrayTypeStart(p: *Parser) !?*Node {
2763 const lbracket = p.eatToken(.LBracket) orelse return null;2763 const lbracket = p.eatToken(.LBracket) orelse return null;
2764 const expr = try p.parseExpr();2764 const expr = try p.parseExpr();
...@@ -2803,8 +2803,7 @@ const Parser = struct {...@@ -2803,8 +2803,7 @@ const Parser = struct {
2803 /// PtrTypeStart2803 /// PtrTypeStart
2804 /// <- ASTERISK2804 /// <- ASTERISK
2805 /// / ASTERISK22805 /// / ASTERISK2
2806 /// / PTRUNKNOWN2806 /// / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
2807 /// / PTRC
2808 fn parsePtrTypeStart(p: *Parser) !?*Node {2807 fn parsePtrTypeStart(p: *Parser) !?*Node {
2809 if (p.eatToken(.Asterisk)) |asterisk| {2808 if (p.eatToken(.Asterisk)) |asterisk| {
2810 const sentinel = if (p.eatToken(.Colon)) |_|2809 const sentinel = if (p.eatToken(.Colon)) |_|