zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 98d5bfbd4d21e99363a0a68ef5a0d0104c302ecb (tree)
parent 2fbe9519acec0d7b9c9dcc41a877fec912337124
Author: Vexu <git@vexu.eu>
Date:   Sun, 22 Nov 2020 21:15:12 +0200

update grammar in langref

Diffstat:
Mdoc/langref.html.in | 96++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mlib/std/zig/parse.zig | 9++++-----
2 files changed, 58 insertions(+), 47 deletions(-)

diff --git a/doc/langref.html.in b/doc/langref.html.in @@ -11042,15 +11042,15 @@ TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block TopLevelComptime &lt;- KEYWORD_comptime BlockExpr TopLevelDecl - &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / KEYWORD_inline)? FnProto (SEMICOLON / Block) + &lt;- (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 &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr) +FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr) VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON -ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr)? (EQUAL Expr)? +ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)? # *** Block Level *** Statement @@ -11090,7 +11090,7 @@ BlockExpr &lt;- BlockLabel? Block # *** Expression Level *** AssignExpr &lt;- Expr (AssignOp Expr)? -Expr &lt;- KEYWORD_try* BoolOrExpr +Expr &lt;- BoolOrExpr BoolOrExpr &lt;- BoolAndExpr (KEYWORD_or BoolAndExpr)* @@ -11215,6 +11215,8 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN +CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN + ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType ParamType @@ -11321,19 +11323,20 @@ SuffixOp FnCallArguments &lt;- LPAREN ExprList RPAREN # Ptr specific -ArrayTypeStart &lt;- LBRACKET Expr? RBRACKET +ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET PtrTypeStart &lt;- ASTERISK / ASTERISK2 - / PTRUNKNOWN - / PTRC + / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET # ContainerDecl specific ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE ContainerDeclType - &lt;- (KEYWORD_struct / KEYWORD_enum / KEYWORD_opaque) (LPAREN Expr RPAREN)? + &lt;- KEYWORD_struct + / KEYWORD_opaque + / KEYWORD_enum (LPAREN Expr RPAREN)? / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)? # Alignment @@ -11357,44 +11360,51 @@ ExprList &lt;- (Expr COMMA)* Expr? # *** Tokens *** eof &lt;- !. hex &lt;- [0-9a-fA-F] +hex_ &lt;- ('_'/hex) +dec &lt;- [0-9] +dec_ &lt;- ('_'/dec) + +dec_int &lt;- dec (dec_* dec)? +hex_int &lt;- hex (hex_* dec)? + char_escape - &lt;- "\\x" hex hex - / "\\u{" hex+ "}" - / "\\" [nr\\t'"] + &lt;- &quot;\\x&quot; hex hex + / &quot;\\u{&quot; hex+ &quot;}&quot; + / &quot;\\&quot; [nr\\t'&quot;] char_char &lt;- char_escape / [^\\'\n] string_char &lt;- char_escape - / [^\\"\n] + / [^\\&quot;\n] line_comment &lt;- '//'[^\n]* -line_string &lt;- ("\\\\" [^\n]* [ \n]*)+ +line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+ skip &lt;- ([ \n] / line_comment)* -CHAR_LITERAL &lt;- "'" char_char "'" skip +CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip FLOAT - &lt;- "0x" hex+ "." hex+ ([pP] [-+]? hex+)? skip - / [0-9]+ "." [0-9]+ ([eE] [-+]? [0-9]+)? skip - / "0x" hex+ "."? [pP] [-+]? hex+ skip - / [0-9]+ "."? [eE] [-+]? [0-9]+ skip + &lt;- &quot;0x&quot; hex_* hex &quot;.&quot; hex_int ([pP] [-+]? hex_int)? skip + / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip + / &quot;0x&quot; hex_* hex &quot;.&quot;? [pP] [-+]? hex_int skip + / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip INTEGER - &lt;- "0b" [01]+ skip - / "0o" [0-7]+ skip - / "0x" hex+ skip - / [0-9]+ skip -STRINGLITERALSINGLE &lt;- "\"" string_char* "\"" skip + &lt;- &quot;0b&quot; [_01]* [01] skip + / &quot;0o&quot; [_0-7]* [0-7] skip + / &quot;0x&quot; hex_* hex skip + / dec_int skip +STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip STRINGLITERAL &lt;- STRINGLITERALSINGLE / line_string skip IDENTIFIER &lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip - / "@\"" string_char* "\"" skip -BUILTINIDENTIFIER &lt;- "@"[A-Za-z_][A-Za-z0-9_]* skip + / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip +BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip -AMPERSAND &lt;- '&' ![=] skip -AMPERSANDEQUAL &lt;- '&=' skip +AMPERSAND &lt;- '&amp;' ![=] skip +AMPERSANDEQUAL &lt;- '&amp;=' skip ASTERISK &lt;- '*' ![*%=] skip ASTERISK2 &lt;- '**' skip ASTERISKEQUAL &lt;- '*=' skip @@ -11419,7 +11429,7 @@ LARROW2 &lt;- '&lt;&lt;' ![=] skip LARROW2EQUAL &lt;- '&lt;&lt;=' skip LARROWEQUAL &lt;- '&lt;=' skip LBRACE &lt;- '{' skip -LBRACKET &lt;- '[' ![*] skip +LBRACKET &lt;- '[' skip LPAREN &lt;- '(' skip MINUS &lt;- '-' ![%=&gt;] skip MINUSEQUAL &lt;- '-=' skip @@ -11436,8 +11446,7 @@ PLUS2 &lt;- '++' skip PLUSEQUAL &lt;- '+=' skip PLUSPERCENT &lt;- '+%' ![=] skip PLUSPERCENTEQUAL &lt;- '+%=' skip -PTRC &lt;- '[*c]' skip -PTRUNKNOWN &lt;- '[*]' skip +LETTERC &lt;- 'c' skip QUESTIONMARK &lt;- '?' skip RARROW &lt;- '&gt;' ![&gt;=] skip RARROW2 &lt;- '&gt;&gt;' ![=] skip @@ -11461,6 +11470,7 @@ KEYWORD_asm &lt;- 'asm' end_of_word KEYWORD_async &lt;- 'async' end_of_word KEYWORD_await &lt;- 'await' end_of_word KEYWORD_break &lt;- 'break' end_of_word +KEYWORD_callconv &lt;- 'callconv' end_of_word KEYWORD_catch &lt;- 'catch' end_of_word KEYWORD_comptime &lt;- 'comptime' end_of_word KEYWORD_const &lt;- 'const' end_of_word @@ -11479,6 +11489,7 @@ KEYWORD_if &lt;- 'if' end_of_word KEYWORD_inline &lt;- 'inline' end_of_word KEYWORD_noalias &lt;- 'noalias' end_of_word KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word +KEYWORD_noinline &lt;- 'noinline' end_of_word KEYWORD_null &lt;- 'null' end_of_word KEYWORD_opaque &lt;- 'opaque' end_of_word KEYWORD_or &lt;- 'or' end_of_word @@ -11503,19 +11514,20 @@ KEYWORD_var &lt;- 'var' end_of_word KEYWORD_volatile &lt;- 'volatile' end_of_word KEYWORD_while &lt;- 'while' end_of_word -keyword &lt;- KEYWORD_align / KEYWORD_and / KEYWORD_anyframe / KEYWORD_anytype - / KEYWORD_allowzero / KEYWORD_asm / KEYWORD_async / KEYWORD_await / KEYWORD_break - / KEYWORD_catch / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue - / KEYWORD_defer / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer - / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_false - / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline - / KEYWORD_noalias / KEYWORD_null / KEYWORD_opaque / KEYWORD_or - / KEYWORD_orelse / KEYWORD_packed / KEYWORD_pub - / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection - / KEYWORD_struct / KEYWORD_suspend - / KEYWORD_switch / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try +keyword &lt;- 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_false / KEYWORD_fn / KEYWORD_for / KEYWORD_if + / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline + / KEYWORD_null / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed + / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection + / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch + / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try / KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable - / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while</code></pre> + / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while +</code></pre> {#header_close#} {#header_open|Zen#} <ul> diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig @@ -488,7 +488,7 @@ const Parser = struct { return &node.base; } - /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr) + /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr) fn parseFnProto(p: *Parser, level: enum { top_level, as_type }, fields: struct { doc_comments: ?*Node.DocComment = null, visib_token: ?TokenIndex = null, @@ -1023,7 +1023,7 @@ const Parser = struct { return p.parseBinOpExpr(parseAssignOp, parseExpr, .Once); } - /// Expr <- KEYWORD_try* BoolOrExpr + /// Expr <- BoolOrExpr fn parseExpr(p: *Parser) Error!?*Node { return p.parsePrefixOpExpr(parseTry, parseBoolOrExpr); } @@ -2758,7 +2758,7 @@ const Parser = struct { rparen: TokenIndex, }; - /// ArrayTypeStart <- LBRACKET Expr? RBRACKET + /// ArrayTypeStart <- LBRACKET Expr? (COLON Expr)? RBRACKET fn parseArrayTypeStart(p: *Parser) !?*Node { const lbracket = p.eatToken(.LBracket) orelse return null; const expr = try p.parseExpr(); @@ -2803,8 +2803,7 @@ const Parser = struct { /// PtrTypeStart /// <- ASTERISK /// / ASTERISK2 - /// / PTRUNKNOWN - /// / PTRC + /// / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET fn parsePtrTypeStart(p: *Parser) !?*Node { if (p.eatToken(.Asterisk)) |asterisk| { const sentinel = if (p.eatToken(.Colon)) |_|