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
1104211042TopLevelComptime &lt;- KEYWORD_comptime BlockExpr
1104311043
1104411044TopLevelDecl
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)
1104611046 / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
1104711047 / 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
1105111051VarDecl &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
1105511055# *** Block Level ***
1105611056Statement
......@@ -11090,7 +11090,7 @@ BlockExpr &lt;- BlockLabel? Block
1109011090# *** Expression Level ***
1109111091AssignExpr &lt;- Expr (AssignOp Expr)?
1109211092
11093Expr &lt;- KEYWORD_try* BoolOrExpr
11093Expr &lt;- BoolOrExpr
1109411094
1109511095BoolOrExpr &lt;- BoolAndExpr (KEYWORD_or BoolAndExpr)*
1109611096
......@@ -11215,6 +11215,8 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN
1121511215
1121611216LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN
1121711217
11218CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN
11219
1121811220ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
1121911221
1122011222ParamType
......@@ -11321,19 +11323,20 @@ SuffixOp
1132111323FnCallArguments &lt;- LPAREN ExprList RPAREN
1132211324
1132311325# Ptr specific
11324ArrayTypeStart &lt;- LBRACKET Expr? RBRACKET
11326ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET
1132511327
1132611328PtrTypeStart
1132711329 &lt;- ASTERISK
1132811330 / ASTERISK2
11329 / PTRUNKNOWN
11330 / PTRC
11331 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
1133111332
1133211333# ContainerDecl specific
1133311334ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE
1133411335
1133511336ContainerDeclType
11336 &lt;- (KEYWORD_struct / KEYWORD_enum / KEYWORD_opaque) (LPAREN Expr RPAREN)?
11337 &lt;- KEYWORD_struct
11338 / KEYWORD_opaque
11339 / KEYWORD_enum (LPAREN Expr RPAREN)?
1133711340 / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
1133811341
1133911342# Alignment
......@@ -11357,44 +11360,51 @@ ExprList &lt;- (Expr COMMA)* Expr?
1135711360# *** Tokens ***
1135811361eof &lt;- !.
1135911362hex &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
1136011370char_escape
11361 &lt;- "\\x" hex hex
11362 / "\\u{" hex+ "}"
11363 / "\\" [nr\\t'"]
11371 &lt;- &quot;\\x&quot; hex hex
11372 / &quot;\\u{&quot; hex+ &quot;}&quot;
11373 / &quot;\\&quot; [nr\\t'&quot;]
1136411374char_char
1136511375 &lt;- char_escape
1136611376 / [^\\'\n]
1136711377string_char
1136811378 &lt;- char_escape
11369 / [^\\"\n]
11379 / [^\\&quot;\n]
1137011380
1137111381line_comment &lt;- '//'[^\n]*
11372line_string &lt;- ("\\\\" [^\n]* [ \n]*)+
11382line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+
1137311383skip &lt;- ([ \n] / line_comment)*
1137411384
11375CHAR_LITERAL &lt;- "'" char_char "'" skip
11385CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip
1137611386FLOAT
11377 &lt;- "0x" hex+ "." hex+ ([pP] [-+]? hex+)? skip
11378 / [0-9]+ "." [0-9]+ ([eE] [-+]? [0-9]+)? skip
11379 / "0x" hex+ "."? [pP] [-+]? hex+ skip
11380 / [0-9]+ "."? [eE] [-+]? [0-9]+ skip
11387 &lt;- &quot;0x&quot; hex_* hex &quot;.&quot; hex_int ([pP] [-+]? hex_int)? skip
11388 / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip
11389 / &quot;0x&quot; hex_* hex &quot;.&quot;? [pP] [-+]? hex_int skip
11390 / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip
1138111391INTEGER
11382 &lt;- "0b" [01]+ skip
11383 / "0o" [0-7]+ skip
11384 / "0x" hex+ skip
11385 / [0-9]+ skip
11386STRINGLITERALSINGLE &lt;- "\"" string_char* "\"" skip
11392 &lt;- &quot;0b&quot; [_01]* [01] skip
11393 / &quot;0o&quot; [_0-7]* [0-7] skip
11394 / &quot;0x&quot; hex_* hex skip
11395 / dec_int skip
11396STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip
1138711397STRINGLITERAL
1138811398 &lt;- STRINGLITERALSINGLE
1138911399 / line_string skip
1139011400IDENTIFIER
1139111401 &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip
11392 / "@\"" string_char* "\"" skip
11393BUILTINIDENTIFIER &lt;- "@"[A-Za-z_][A-Za-z0-9_]* skip
11402 / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip
11403BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip
1139411404
1139511405
11396AMPERSAND &lt;- '&' ![=] skip
11397AMPERSANDEQUAL &lt;- '&=' skip
11406AMPERSAND &lt;- '&amp;' ![=] skip
11407AMPERSANDEQUAL &lt;- '&amp;=' skip
1139811408ASTERISK &lt;- '*' ![*%=] skip
1139911409ASTERISK2 &lt;- '**' skip
1140011410ASTERISKEQUAL &lt;- '*=' skip
......@@ -11419,7 +11429,7 @@ LARROW2 &lt;- '&lt;&lt;' ![=] skip
1141911429LARROW2EQUAL &lt;- '&lt;&lt;=' skip
1142011430LARROWEQUAL &lt;- '&lt;=' skip
1142111431LBRACE &lt;- '{' skip
11422LBRACKET &lt;- '[' ![*] skip
11432LBRACKET &lt;- '[' skip
1142311433LPAREN &lt;- '(' skip
1142411434MINUS &lt;- '-' ![%=&gt;] skip
1142511435MINUSEQUAL &lt;- '-=' skip
......@@ -11436,8 +11446,7 @@ PLUS2 &lt;- '++' skip
1143611446PLUSEQUAL &lt;- '+=' skip
1143711447PLUSPERCENT &lt;- '+%' ![=] skip
1143811448PLUSPERCENTEQUAL &lt;- '+%=' skip
11439PTRC &lt;- '[*c]' skip
11440PTRUNKNOWN &lt;- '[*]' skip
11449LETTERC &lt;- 'c' skip
1144111450QUESTIONMARK &lt;- '?' skip
1144211451RARROW &lt;- '&gt;' ![&gt;=] skip
1144311452RARROW2 &lt;- '&gt;&gt;' ![=] skip
......@@ -11461,6 +11470,7 @@ KEYWORD_asm &lt;- 'asm' end_of_word
1146111470KEYWORD_async &lt;- 'async' end_of_word
1146211471KEYWORD_await &lt;- 'await' end_of_word
1146311472KEYWORD_break &lt;- 'break' end_of_word
11473KEYWORD_callconv &lt;- 'callconv' end_of_word
1146411474KEYWORD_catch &lt;- 'catch' end_of_word
1146511475KEYWORD_comptime &lt;- 'comptime' end_of_word
1146611476KEYWORD_const &lt;- 'const' end_of_word
......@@ -11479,6 +11489,7 @@ KEYWORD_if &lt;- 'if' end_of_word
1147911489KEYWORD_inline &lt;- 'inline' end_of_word
1148011490KEYWORD_noalias &lt;- 'noalias' end_of_word
1148111491KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word
11492KEYWORD_noinline &lt;- 'noinline' end_of_word
1148211493KEYWORD_null &lt;- 'null' end_of_word
1148311494KEYWORD_opaque &lt;- 'opaque' end_of_word
1148411495KEYWORD_or &lt;- 'or' end_of_word
......@@ -11503,19 +11514,20 @@ KEYWORD_var &lt;- 'var' end_of_word
1150311514KEYWORD_volatile &lt;- 'volatile' end_of_word
1150411515KEYWORD_while &lt;- 'while' end_of_word
1150511516
11506keyword &lt;- KEYWORD_align / KEYWORD_and / KEYWORD_anyframe / KEYWORD_anytype
11507 / KEYWORD_allowzero / KEYWORD_asm / KEYWORD_async / KEYWORD_await / KEYWORD_break
11508 / KEYWORD_catch / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue
11509 / KEYWORD_defer / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer
11510 / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_false
11511 / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline
11512 / KEYWORD_noalias / KEYWORD_null / KEYWORD_opaque / KEYWORD_or
11513 / KEYWORD_orelse / KEYWORD_packed / KEYWORD_pub
11514 / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
11515 / KEYWORD_struct / KEYWORD_suspend
11516 / KEYWORD_switch / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
11517keyword &lt;- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe
11518 / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await
11519 / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime
11520 / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else
11521 / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export
11522 / KEYWORD_extern / KEYWORD_false / KEYWORD_fn / KEYWORD_for / KEYWORD_if
11523 / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
11524 / KEYWORD_null / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
11525 / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
11526 / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch
11527 / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
1151711528 / 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>
1151911531 {#header_close#}
1152011532 {#header_open|Zen#}
1152111533 <ul>
lib/std/zig/parse.zig+4-5
......@@ -488,7 +488,7 @@ const Parser = struct {
488488 return &node.base;
489489 }
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)
492492 fn parseFnProto(p: *Parser, level: enum { top_level, as_type }, fields: struct {
493493 doc_comments: ?*Node.DocComment = null,
494494 visib_token: ?TokenIndex = null,
......@@ -1023,7 +1023,7 @@ const Parser = struct {
10231023 return p.parseBinOpExpr(parseAssignOp, parseExpr, .Once);
10241024 }
10251025
1026 /// Expr <- KEYWORD_try* BoolOrExpr
1026 /// Expr <- BoolOrExpr
10271027 fn parseExpr(p: *Parser) Error!?*Node {
10281028 return p.parsePrefixOpExpr(parseTry, parseBoolOrExpr);
10291029 }
......@@ -2758,7 +2758,7 @@ const Parser = struct {
27582758 rparen: TokenIndex,
27592759 };
27602760
2761 /// ArrayTypeStart <- LBRACKET Expr? RBRACKET
2761 /// ArrayTypeStart <- LBRACKET Expr? (COLON Expr)? RBRACKET
27622762 fn parseArrayTypeStart(p: *Parser) !?*Node {
27632763 const lbracket = p.eatToken(.LBracket) orelse return null;
27642764 const expr = try p.parseExpr();
......@@ -2803,8 +2803,7 @@ const Parser = struct {
28032803 /// PtrTypeStart
28042804 /// <- ASTERISK
28052805 /// / ASTERISK2
2806 /// / PTRUNKNOWN
2807 /// / PTRC
2806 /// / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
28082807 fn parsePtrTypeStart(p: *Parser) !?*Node {
28092808 if (p.eatToken(.Asterisk)) |asterisk| {
28102809 const sentinel = if (p.eatToken(.Colon)) |_|