diff options
| author | Isaac Freund <ifreund@ifreund.xyz> | 2021-05-28 19:21:14 +0000 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-06-04 01:18:45 -0400 |
| commit | 05b677f0c484181bcbd7eb86b41a70b8e508644b (patch) | |
| tree | 7675893eb1a990daaeb2bda97a1b4fec21a704c6 /doc | |
| parent | ce072894a16469aea24fd2060013037ba7411b17 (diff) | |
| download | zig-05b677f0c484181bcbd7eb86b41a70b8e508644b.tar.gz zig-05b677f0c484181bcbd7eb86b41a70b8e508644b.zip | |
langref: sync grammar with zig-spec repo
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/langref.html.in | 148 |
1 files changed, 100 insertions, 48 deletions
diff --git a/doc/langref.html.in b/doc/langref.html.in index 9458abfe18..da3c038948 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -9748,7 +9748,7 @@ test "expect in release fast mode" { to see a command-line usage help menu. This will include project-specific options that were declared in the build.zig script. </p> - + {#header_open|Building an Executable#} <p>This <code>build.zig</code> file is automatically generated by <code>zig init-exe</code>.</p> @@ -11112,40 +11112,40 @@ fn readU32Be() u32 {} {#header_close#} {#header_open|Grammar#} - <pre><code>Root <- skip ContainerMembers eof + <pre><code>Root <- skip container_doc_comment? ContainerMembers eof # *** Top level *** -ContainerMembers - <- TestDecl ContainerMembers - / TopLevelComptime ContainerMembers - / KEYWORD_pub? TopLevelDecl ContainerMembers - / ContainerField COMMA ContainerMembers - / ContainerField +ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations) + +ContainerDeclarations + <- TestDecl ContainerDeclarations + / TopLevelComptime ContainerDeclarations + / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations / -TestDecl <- KEYWORD_test STRINGLITERALSINGLE Block +TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block -TopLevelComptime <- KEYWORD_comptime BlockExpr +TopLevelComptime <- doc_comment? KEYWORD_comptime BlockExpr TopLevelDecl <- (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 <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr) +FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON -ContainerField <- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)? +ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)? # *** Block Level *** Statement <- KEYWORD_comptime? VarDecl / KEYWORD_comptime BlockExprStatement / KEYWORD_nosuspend BlockExprStatement - / KEYWORD_suspend (SEMICOLON / BlockExprStatement) + / KEYWORD_suspend BlockExprStatement / KEYWORD_defer BlockExprStatement - / KEYWORD_errdefer BlockExprStatement + / KEYWORD_errdefer Payload? BlockExprStatement / IfStatement / LabeledStatement / SwitchExpr @@ -11278,7 +11278,7 @@ WhileTypeExpr <- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)? SwitchExpr <- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE # *** Assembly *** -AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN STRINGLITERAL AsmOutput? RPAREN +AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN AsmOutput <- COLON AsmOutputList AsmInput? @@ -11301,13 +11301,15 @@ WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN +# Fn specific CallConv <- KEYWORD_callconv LPAREN Expr RPAREN -ParamDecl <- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType +ParamDecl + <- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType + / DOT3 ParamType <- KEYWORD_anytype - / DOT3 / TypeExpr # Control flow prefixes @@ -11397,11 +11399,12 @@ PrefixOp PrefixTypeOp <- QUESTIONMARK / KEYWORD_anyframe MINUSRARROW - / ArrayTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* + / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)* + / ArrayTypeStart SuffixOp - <- LBRACKET Expr (DOT2 Expr?)? RBRACKET + <- LBRACKET Expr (DOT2 (Expr? (COLON Expr)?)?)? RBRACKET / DOT IDENTIFIER / DOTASTERISK / DOTQUESTIONMARK @@ -11409,15 +11412,17 @@ SuffixOp FnCallArguments <- LPAREN ExprList RPAREN # Ptr specific -ArrayTypeStart <- LBRACKET Expr? (COLON Expr)? RBRACKET +SliceTypeStart <- LBRACKET (COLON Expr)? RBRACKET PtrTypeStart <- ASTERISK / ASTERISK2 / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET +ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET + # ContainerDecl specific -ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE +ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE ContainerDeclType <- KEYWORD_struct @@ -11429,7 +11434,7 @@ ContainerDeclType ByteAlign <- KEYWORD_align LPAREN Expr RPAREN # Lists -IdentifierList <- (IDENTIFIER COMMA)* IDENTIFIER? +IdentifierList <- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)? SwitchProngList <- (SwitchProng COMMA)* SwitchProng? @@ -11445,49 +11450,96 @@ ExprList <- (Expr COMMA)* Expr? # *** Tokens *** eof <- !. -eol <- ('\r'? '\n') | eof +bin <- [01] +bin_ <- '_'? bin +oct <- [0-7] +oct_ <- '_'? oct hex <- [0-9a-fA-F] -hex_ <- ('_'/hex) +hex_ <- '_'? hex dec <- [0-9] -dec_ <- ('_'/dec) - -dec_int <- dec (dec_* dec)? -hex_int <- hex (hex_* dec)? +dec_ <- '_'? dec + +bin_int <- bin bin_* +oct_int <- oct oct_* +dec_int <- dec dec_* +hex_int <- hex hex_* + +ox80_oxBF <- [\200-\277] +oxF4 <- '\364' +ox80_ox8F <- [\200-\217] +oxF1_oxF3 <- [\361-\363] +oxF0 <- '\360' +ox90_0xBF <- [\220-\277] +oxEE_oxEF <- [\356-\357] +oxED <- '\355' +ox80_ox9F <- [\200-\237] +oxE1_oxEC <- [\341-\354] +oxE0 <- '\340' +oxA0_oxBF <- [\240-\277] +oxC2_oxDF <- [\302-\337] + +# From https://lemire.me/blog/2018/05/09/how-quickly-can-you-check-that-a-string-is-valid-unicode-utf-8/ +# First Byte Second Byte Third Byte Fourth Byte +# [0x00,0x7F] +# [0xC2,0xDF] [0x80,0xBF] +# 0xE0 [0xA0,0xBF] [0x80,0xBF] +# [0xE1,0xEC] [0x80,0xBF] [0x80,0xBF] +# 0xED [0x80,0x9F] [0x80,0xBF] +# [0xEE,0xEF] [0x80,0xBF] [0x80,0xBF] +# 0xF0 [0x90,0xBF] [0x80,0xBF] [0x80,0xBF] +# [0xF1,0xF3] [0x80,0xBF] [0x80,0xBF] [0x80,0xBF] +# 0xF4 [0x80,0x8F] [0x80,0xBF] [0x80,0xBF] + +mb_utf8_literal <- + oxF4 ox80_ox8F ox80_oxBF ox80_oxBF + / oxF1_oxF3 ox80_oxBF ox80_oxBF ox80_oxBF + / oxF0 ox90_0xBF ox80_oxBF ox80_oxBF + / oxEE_oxEF ox80_oxBF ox80_oxBF + / oxED ox80_ox9F ox80_oxBF + / oxE1_oxEC ox80_oxBF ox80_oxBF + / oxE0 oxA0_oxBF ox80_oxBF + / oxC2_oxDF ox80_oxBF + +ascii_char_not_nl_slash_squote <- [\000-\011\013-\046-\050-\133\135-\177] char_escape - <- '\\x' hex hex - / '\\u{' hex+ '}' - / '\\' [nr\\t'"] + <- "\\x" hex hex + / "\\u{" hex+ "}" + / "\\" [nr\\t'"] char_char - <- char_escape - / [^\\'\r\n] + <- mb_utf8_literal + / char_escape + / ascii_char_not_nl_slash_squote + string_char <- char_escape - / [^\\"\r\n] + / [^\\"\n] -line_comment <- '//'[^\r\n]* eol -line_string <- ('\\\\' [^\r\n]* eol skip)+ -skip <- ([ \t] / eol / line_comment)* +container_doc_comment <- ('//!' [^\n]* [ \n]*)+ +doc_comment <- ('///' [^\n]* [ \n]*)+ +line_comment <- '//' ![!/][^\n]* / '////' [^\n]* +line_string <- ("\\\\" [^\n]* [ \n]*)+ +skip <- ([ \n] / line_comment)* CHAR_LITERAL <- "'" char_char "'" skip FLOAT - <- '0x' hex_* hex '.' hex_int ([pP] [-+]? hex_int)? skip - / dec_int '.' dec_int ([eE] [-+]? dec_int)? skip - / '0x' hex_* hex '.'? [pP] [-+]? hex_int skip - / dec_int '.'? [eE] [-+]? dec_int skip + <- "0x" hex_int "." hex_int ([pP] [-+]? dec_int)? skip + / dec_int "." dec_int ([eE] [-+]? dec_int)? skip + / "0x" hex_int "."? [pP] [-+]? dec_int skip + / dec_int "."? [eE] [-+]? dec_int skip INTEGER - <- '0b' [_01]* [01] skip - / '0o' [_0-7]* [0-7] skip - / '0x' hex_* hex skip + <- "0b" bin_int skip + / "0o" oct_int skip + / "0x" hex_int skip / dec_int skip -STRINGLITERALSINGLE <- '"' string_char* '"' skip +STRINGLITERALSINGLE <- "\"" string_char* "\"" skip STRINGLITERAL <- STRINGLITERALSINGLE - / line_string skip + / (line_string skip)+ IDENTIFIER <- !keyword [A-Za-z_] [A-Za-z0-9_]* skip - / '@"' string_char* '"' skip -BUILTINIDENTIFIER <- '@'[A-Za-z_][A-Za-z0-9_]* skip + / "@\"" string_char* "\"" skip +BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip AMPERSAND <- '&' ![=] skip |
