authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-11-14 08:56:26+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2018-11-14 08:56:26+01:00
log14308db923d361d857bd768ca7d6cb1f512081a1
tree0d7ac38e45e947fcd6d0e030320523515e1b66ab
parent5b3f7a8e1f5cc0448d4100dc98f947a7cd7c5723

Manual update to new grammar.

TODO: Figure out how we can auto update this, when the grammar changes in the zig-spec repo

1 files changed, 426 insertions(+), 85 deletions(-)

doc/langref.html.in+426-85
......@@ -7713,167 +7713,508 @@ fn readU32Be() u32 {}
77137713 <p>For some discussion on the rationale behind these design decisions, see <a href="https://github.com/ziglang/zig/issues/663">issue #663</a></p>
77147714 {#header_close#}
77157715 {#header_open|Grammar#}
7716 <pre><code class="nohighlight">Root = many(TopLevelItem) EOF
7716 <pre><code class="nohighlight">
7717Root <- skip ContainerMembers eof
77177718
7718TopLevelItem = CompTimeExpression(Block) | TopLevelDecl | TestDecl
7719# *** Top level ***
7720ContainerMembers
7721 <- TestDecl ContainerMembers
7722 / TopLevelComptime ContainerMembers
7723 / KEYWORD_pub? TopLevelDecl ContainerMembers
7724 / KEYWORD_pub? ContainerField COMMA ContainerMembers
7725 / KEYWORD_pub? ContainerField
7726 /
77197727
7720TestDecl = "test" String Block
7728TestDecl <- KEYWORD_test STRINGLITERAL Block
77217729
7722TopLevelDecl = option("pub") (FnDef | ExternDecl | GlobalVarDecl | UseDecl)
7730TopLevelComptime <- KEYWORD_comptime BlockExpr
77237731
7724GlobalVarDecl = option("export") VariableDeclaration ";"
7732TopLevelDecl
7733 <- (KEYWORD_export / KEYWORD_extern STRINGLITERAL? / KEYWORD_inline)? FnProto (SEMICOLON / Block)
7734 / (KEYWORD_export / KEYWORD_extern STRINGLITERAL?)? VarDecl
7735 / KEYWORD_use Expr SEMICOLON
77257736
7726LocalVarDecl = option("comptime") VariableDeclaration
7737FnProto <- FnCC? KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? Section? EXCLAMATIONMARK? (KEYWORD_var / TypeExpr)
77277738
7728VariableDeclaration = ("var" | "const") Symbol option(":" TypeExpr) option("align" "(" Expression ")") option("section" "(" Expression ")") "=" Expression
7739VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? Section? (EQUAL Expr)? SEMICOLON
77297740
7730ContainerMember = (ContainerField | FnDef | GlobalVarDecl)
7741ContainerField <- IDENTIFIER (COLON TypeExpr)? (EQUAL Expr)?
77317742
7732ContainerField = Symbol option(":" PrefixOpExpression) option("=" PrefixOpExpression) ","
7743# *** Block Level ***
7744Statement
7745 <- KEYWORD_comptime? VarDecl
7746 / KEYWORD_comptime BlockExprStatement
7747 / KEYWORD_suspend (SEMICOLON / BlockExprStatement)
7748 / KEYWORD_defer BlockExprStatement
7749 / KEYWORD_errdefer BlockExprStatement
7750 / IfStatement
7751 / LabeledStatement
7752 / SwitchExpr
7753 / AssignExpr SEMICOLON
77337754
7734UseDecl = "use" Expression ";"
7755IfStatement
7756 <- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )?
7757 / IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
77357758
7736ExternDecl = "extern" option(String) (FnProto | VariableDeclaration) ";"
7759LabeledStatement <- BlockLabel? (Block / LoopStatement)
77377760
7738FnProto = option("nakedcc" | "stdcallcc" | "extern" | ("async" option("&lt;" Expression "&gt;"))) "fn" option(Symbol) ParamDeclList option("align" "(" Expression ")") option("section" "(" Expression ")") option("!") (TypeExpr | "var")
7761LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement)
77397762
7740FnDef = option("inline" | "export") FnProto Block
7763ForStatement
7764 <- ForPrefix BlockExpr ( KEYWORD_else Statement )?
7765 / ForPrefix AssignExpr ( SEMICOLON / KEYWORD_else Statement )
77417766
7742ParamDeclList = "(" list(ParamDecl, ",") ")"
7767WhileStatement
7768 <- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )?
7769 / WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
77437770
7744ParamDecl = option("noalias" | "comptime") option(Symbol ":") (TypeExpr | "var" | "...")
7771BlockExprStatement
7772 <- BlockExpr
7773 / AssignExpr SEMICOLON
77457774
7746Block = option(Symbol ":") "{" many(Statement) "}"
7775BlockExpr <- BlockLabel? Block
77477776
7748Statement = LocalVarDecl ";" | Defer(Block) | Defer(Expression) ";" | BlockExpression(Block) | Expression ";" | ";"
7777# *** Expression Level ***
7778AssignExpr <- Expr (AssignOp Expr)?
77497779
7750TypeExpr = (PrefixOpExpression "!" PrefixOpExpression) | PrefixOpExpression
7780Expr <- KEYWORD_try* BoolOrExpr
77517781
7752BlockOrExpression = Block | Expression
7782BoolOrExpr <- BoolAndExpr (KEYWORD_or BoolAndExpr)*
77537783
7754Expression = TryExpression | ReturnExpression | BreakExpression | AssignmentExpression | CancelExpression | ResumeExpression
7784BoolAndExpr <- CompareExpr (KEYWORD_and CompareExpr)*
77557785
7756AsmExpression = "asm" option("volatile") "(" String option(AsmOutput) ")"
7786CompareExpr <- BitwiseExpr (CompareOp BitwiseExpr)?
77577787
7758AsmOutput = ":" list(AsmOutputItem, ",") option(AsmInput)
7788BitwiseExpr <- BitShiftExpr (BitwiseOp BitShiftExpr)*
77597789
7760AsmInput = ":" list(AsmInputItem, ",") option(AsmClobbers)
7790BitShiftExpr <- AdditionExpr (BitShiftOp AdditionExpr)*
77617791
7762AsmOutputItem = "[" Symbol "]" String "(" (Symbol | "-&gt;" TypeExpr) ")"
7792AdditionExpr <- MultiplyExpr (AdditionOp MultiplyExpr)*
77637793
7764AsmInputItem = "[" Symbol "]" String "(" Expression ")"
7794MultiplyExpr <- PrefixExpr (MultiplyOp PrefixExpr)*
77657795
7766AsmClobbers= ":" list(String, ",")
7796PrefixExpr <- PrefixOp* PrimaryExpr
77677797
7768UnwrapExpression = BoolOrExpression (UnwrapOptional | UnwrapError) | BoolOrExpression
7798PrimaryExpr
7799 <- AsmExpr
7800 / IfExpr
7801 / KEYWORD_break BreakLabel? Expr?
7802 / KEYWORD_cancel Expr
7803 / KEYWORD_comptime Expr
7804 / KEYWORD_continue BreakLabel?
7805 / KEYWORD_resume Expr
7806 / KEYWORD_return Expr?
7807 / LabeledExpr
7808 / CurlySuffixExpr
77697809
7770UnwrapOptional = "orelse" Expression
7810IfExpr <- IfPrefix Expr (KEYWORD_else Payload? Expr)?
77717811
7772UnwrapError = "catch" option("|" Symbol "|") Expression
7812LabeledExpr <- BlockLabel? (Block / LoopExpr)
77737813
7774AssignmentExpression = UnwrapExpression AssignmentOperator UnwrapExpression | UnwrapExpression
7814Block <- LBRACE Statement* RBRACE
77757815
7776AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&amp;=" | "^=" | "|=" | "*%=" | "+%=" | "-%="
7816LoopExpr <- KEYWORD_inline? (ForExpr / WhileExpr)
77777817
7778BlockExpression(body) = Block | IfExpression(body) | IfErrorExpression(body) | TestExpression(body) | WhileExpression(body) | ForExpression(body) | SwitchExpression | CompTimeExpression(body) | SuspendExpression(body)
7818ForExpr <- ForPrefix Expr (KEYWORD_else Expr)?
77797819
7780CompTimeExpression(body) = "comptime" body
7820WhileExpr <- WhilePrefix Expr (KEYWORD_else Payload? Expr)?
77817821
7782SwitchExpression = "switch" "(" Expression ")" "{" many(SwitchProng) "}"
7822CurlySuffixExpr <- TypeExpr InitList?
77837823
7784SwitchProng = (list(SwitchItem, ",") | "else") "=&gt;" option("|" option("*") Symbol "|") Expression ","
7824InitList
7825 <- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE
7826 / LBRACE Expr (COMMA Expr)* COMMA? RBRACE
7827 / LBRACE RBRACE
77857828
7786SwitchItem = Expression | (Expression "..." Expression)
7829TypeExpr <- PrefixTypeOp* ErrorUnionExpr
77877830
7788ForExpression(body) = option(Symbol ":") option("inline") "for" "(" Expression ")" option("|" option("*") Symbol option("," Symbol) "|") body option("else" BlockExpression(body))
7831ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK TypeExpr)?
77897832
7790BoolOrExpression = BoolAndExpression "or" BoolOrExpression | BoolAndExpression
7833SuffixExpr
7834 <- AsyncPrefix PrimaryTypeExpr SuffixOp* FnCallArgumnets
7835 / PrimaryTypeExpr (SuffixOp / FnCallArgumnets)*
77917836
7792ReturnExpression = "return" option(Expression)
7837PrimaryTypeExpr
7838 <- BUILTININDENTIFIER FnCallArgumnets
7839 / CHAR_LITERAL
7840 / ContainerDecl
7841 / ErrorSetDecl
7842 / FLOAT
7843 / FnProto
7844 / GroupedExpr
7845 / LabeledTypeExpr
7846 / IDENTIFIER
7847 / IfTypeExpr
7848 / INTEGER
7849 / KEYWORD_anyerror
7850 / KEYWORD_comptime TypeExpr
7851 / KEYWORD_error DOT IDENTIFIER
7852 / KEYWORD_false
7853 / KEYWORD_null
7854 / KEYWORD_promise
7855 / KEYWORD_true
7856 / KEYWORD_undefined
7857 / KEYWORD_unreachable
7858 / STRINGLITERAL
7859 / SwitchExpr
77937860
7794TryExpression = "try" Expression
7861ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto
77957862
7796AwaitExpression = "await" Expression
7863ErrorSetDecl <- KEYWORD_error LBRACE IdentifierList RBRACE
77977864
7798BreakExpression = "break" option(":" Symbol) option(Expression)
7865GroupedExpr <- LPAREN Expr RPAREN
77997866
7800CancelExpression = "cancel" Expression;
7867IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
78017868
7802ResumeExpression = "resume" Expression;
7869LabeledTypeExpr
7870 <- BlockLabel Block
7871 / BlockLabel? LoopTypeExpr
78037872
7804Defer(body) = ("defer" | "errdefer") body
7873LoopTypeExpr <- KEYWORD_inline? (ForTypeExpr / WhileTypeExpr)
78057874
7806IfExpression(body) = "if" "(" Expression ")" body option("else" BlockExpression(body))
7875ForTypeExpr <- ForPrefix TypeExpr (KEYWORD_else TypeExpr)?
78077876
7808SuspendExpression(body) = "suspend" option( body )
7877WhileTypeExpr <- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
78097878
7810IfErrorExpression(body) = "if" "(" Expression ")" option("|" option("*") Symbol "|") body "else" "|" Symbol "|" BlockExpression(body)
7879SwitchExpr <- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE
78117880
7812TestExpression(body) = "if" "(" Expression ")" option("|" option("*") Symbol "|") body option("else" BlockExpression(body))
7881# *** Assembly ***
7882AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN STRINGLITERAL AsmOutput? RPAREN
78137883
7814WhileExpression(body) = option(Symbol ":") option("inline") "while" "(" Expression ")" option("|" option("*") Symbol "|") option(":" "(" Expression ")") body option("else" option("|" Symbol "|") BlockExpression(body))
7884AsmOutput <- COLON AsmOutputList AsmInput?
78157885
7816BoolAndExpression = ComparisonExpression "and" BoolAndExpression | ComparisonExpression
7886AsmOutputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN (MINUSRARROW TypeExpr / IDENTIFIER) RPAREN
78177887
7818ComparisonExpression = BinaryOrExpression ComparisonOperator BinaryOrExpression | BinaryOrExpression
7888AsmInput <- COLON AsmInputList AsmCloppers?
78197889
7820ComparisonOperator = "==" | "!=" | "&lt;" | "&gt;" | "&lt;=" | "&gt;="
7890AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN Expr RPAREN
78217891
7822BinaryOrExpression = BinaryXorExpression "|" BinaryOrExpression | BinaryXorExpression
7892AsmCloppers <- COLON StringList
78237893
7824BinaryXorExpression = BinaryAndExpression "^" BinaryXorExpression | BinaryAndExpression
7894# *** Helper grammar ***
7895BreakLabel <- COLON IDENTIFIER
78257896
7826BinaryAndExpression = BitShiftExpression "&amp;" BinaryAndExpression | BitShiftExpression
7897BlockLabel <- IDENTIFIER COLON
78277898
7828BitShiftExpression = AdditionExpression BitShiftOperator BitShiftExpression | AdditionExpression
7899FieldInit <- DOT IDENTIFIER EQUAL Expr
78297900
7830BitShiftOperator = "&lt;&lt;" | "&gt;&gt;"
7901WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN
78317902
7832AdditionExpression = MultiplyExpression AdditionOperator AdditionExpression | MultiplyExpression
7903Section <- KEYWORD_section LPAREN Expr RPAREN
78337904
7834AdditionOperator = "+" | "-" | "++" | "+%" | "-%"
7905# Fn specific
7906FnCC
7907 <- KEYWORD_nakedcc
7908 / KEYWORD_stdcallcc
7909 / KEYWORD_extern
7910 / KEYWORD_async (LARROW TypeExpr RARROW)?
78357911
7836MultiplyExpression = CurlySuffixExpression MultiplyOperator MultiplyExpression | CurlySuffixExpression
7912ParamDecl <- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
78377913
7838CurlySuffixExpression = TypeExpr option(ContainerInitExpression)
7914ParamType
7915 <- KEYWORD_var
7916 / DOT3
7917 / TypeExpr
78397918
7840MultiplyOperator = "||" | "*" | "/" | "%" | "**" | "*%"
7919# Control flow prefixes
7920IfPrefix <- KEYWORD_if LPAREN Expr RPAREN PtrPayload?
78417921
7842PrefixOpExpression = PrefixOp TypeExpr | SuffixOpExpression
7922WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr?
78437923
7844SuffixOpExpression = ("async" option("&lt;" SuffixOpExpression "&gt;") SuffixOpExpression FnCallExpression) | PrimaryExpression option(FnCallExpression | ArrayAccessExpression | FieldAccessExpression | SliceExpression | ".*" | ".?")
7924ForPrefix <- KEYWORD_for LPAREN Expr RPAREN PtrIndexPayload
78457925
7846FieldAccessExpression = "." Symbol
7926# Payloads
7927Payload <- PIPE IDENTIFIER PIPE
78477928
7848FnCallExpression = "(" list(Expression, ",") ")"
7929PtrPayload <- PIPE ASTERISK? IDENTIFIER PIPE
78497930
7850ArrayAccessExpression = "[" Expression "]"
7931PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE
78517932
7852SliceExpression = "[" Expression ".." option(Expression) "]"
78537933
7854ContainerInitExpression = "{" ContainerInitBody "}"
7934# Switch specific
7935SwitchProng <- SwitchCase EQUALRARROW PtrPayload? AssignExpr
78557936
7856ContainerInitBody = list(StructLiteralField, ",") | list(Expression, ",")
7937SwitchCase
7938 <- SwitchItem (COMMA SwitchItem)* COMMA?
7939 / KEYWORD_else
78577940
7858StructLiteralField = "." Symbol "=" Expression
7941SwitchItem <- Expr (DOT3 Expr)?
78597942
7860PrefixOp = "!" | "-" | "~" | (("*" | "[*]") option("align" "(" Expression option(":" Integer ":" Integer) ")" ) option("const") option("volatile")) | "?" | "-%" | "try" | "await"
7943# Operators
7944AssignOp
7945 <- ASTERISKEQUAL
7946 / SLASHEQUAL
7947 / PERCENTEQUAL
7948 / PLUSEQUAL
7949 / MINUSEQUAL
7950 / LARROW2EQUAL
7951 / RARROW2EQUAL
7952 / AMPERSANDEQUAL
7953 / CARETEQUAL
7954 / PIPEEQUAL
7955 / ASTERISKPERCENTEQUAL
7956 / PLUSPERCENTEQUAL
7957 / MINUSPERCENTEQUAL
7958 / EQUAL
78617959
7862PrimaryExpression = Integer | Float | String | CharLiteral | KeywordLiteral | GroupedExpression | BlockExpression(BlockOrExpression) | Symbol | ("@" Symbol FnCallExpression) | ArrayType | FnProto | AsmExpression | ContainerDecl | ("continue" option(":" Symbol)) | ErrorSetDecl | PromiseType
7960CompareOp
7961 <- EQUALEQUAL
7962 / EXCLAMATIONMARKEQUAL
7963 / LARROW
7964 / RARROW
7965 / LARROWEQUAL
7966 / RARROWEQUAL
78637967
7864PromiseType = "promise" option("-&gt;" TypeExpr)
7968BitwiseOp
7969 <- AMPERSAND
7970 / CARET
7971 / PIPE
7972 / KEYWORD_orelse
7973 / KEYWORD_catch Payload?
78657974
7866ArrayType : "[" option(Expression) "]" option("align" "(" Expression option(":" Integer ":" Integer) ")")) option("const") option("volatile") TypeExpr
7975BitShiftOp
7976 <- LARROW2
7977 / RARROW2
78677978
7868GroupedExpression = "(" Expression ")"
7869
7870KeywordLiteral = "true" | "false" | "null" | "undefined" | "error" | "unreachable" | "suspend"
7871
7872ErrorSetDecl = "error" "{" list(Symbol, ",") "}"
7873
7874ContainerDecl = option("extern" | "packed")
7875 ("struct" option(GroupedExpression) | "union" option("enum" option(GroupedExpression) | GroupedExpression) | ("enum" option(GroupedExpression)))
7876 "{" many(ContainerMember) "}"</code></pre>
7979AdditionOp
7980 <- PLUS
7981 / MINUS
7982 / PLUS2
7983 / PLUSPERCENT
7984 / MINUSPERCENT
7985
7986MultiplyOp
7987 <- PIPE2
7988 / ASTERISK
7989 / SLASH
7990 / PERCENT
7991 / ASTERISK2
7992 / ASTERISKPERCENT
7993
7994PrefixOp
7995 <- EXCLAMATIONMARK
7996 / MINUS
7997 / TILDE
7998 / MINUSPERCENT
7999 / AMPERSAND
8000 / KEYWORD_try
8001 / KEYWORD_await
8002
8003PrefixTypeOp
8004 <- QUESTIONMARK
8005 / KEYWORD_promise MINUSRARROW
8006 / ArrayTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile)*
8007 / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile)*
8008
8009SuffixOp
8010 <- LBRACKET Expr (DOT2 Expr?)? RBRACKET
8011 / DOT IDENTIFIER
8012 / DOTASTERISK
8013 / DOTQUESTIONMARK
8014
8015AsyncPrefix <- KEYWORD_async (LARROW PrefixExpr RARROW)?
8016
8017FnCallArgumnets <- LPAREN ExprList RPAREN
8018
8019# Ptr specific
8020ArrayTypeStart <- LBRACKET Expr? RBRACKET
8021
8022PtrTypeStart
8023 <- ASTERISK
8024 / ASTERISK2
8025 / LBRACKET ASTERISK RBRACKET
8026
8027# ContainerDecl specific
8028ContainerDeclAuto <- ContainerDeclType LBRACE ContainerMembers RBRACE
8029
8030ContainerDeclType
8031 <- (KEYWORD_struct / KEYWORD_enum) (LPAREN Expr RPAREN)?
8032 / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
8033
8034# Alignment
8035ByteAlign <- KEYWORD_align LPAREN Expr RPAREN
8036
8037# Lists
8038IdentifierList <- (IDENTIFIER COMMA)* IDENTIFIER?
8039
8040SwitchProngList <- (SwitchProng COMMA)* SwitchProng?
8041
8042AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem?
8043
8044AsmInputList <- (AsmInputItem COMMA)* AsmInputItem?
8045
8046StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL?
8047
8048ParamDeclList <- (ParamDecl COMMA)* ParamDecl?
8049
8050ExprList <- (Expr COMMA)* Expr?
8051
8052# *** Tokens ***
8053eof <- !.
8054hex <- [0-9a-fA-F]
8055char_escape
8056 <- "\\x" hex hex
8057 / "\\u" hex hex hex hex
8058 / "\\U" hex hex hex hex hex hex
8059 / "\\" [nr\\t'"]
8060char_char
8061 <- char_escape
8062 / [^\\'\n]
8063string_char
8064 <- char_escape
8065 / [^\\"\n]
8066
8067line_comment <- '//'[^\n]*
8068line_string <- ("\\\\" [^\n]* [ \n]*)+
8069line_cstring <- ("c\\\\" [^\n]* [ \n]*)+
8070skip <- ([ \n] / line_comment)*
8071
8072CHAR_LITERAL <- "'" char_char "'" skip
8073FLOAT
8074 <- "0b" [01]+ "." [01]+ ([eE] [-+]? [01]+)? skip
8075 / "0o" [0-7]+ "." [0-7]+ ([eE] [-+]? [0-7]+)? skip
8076 / "0x" hex+ "." hex+ ([pP] [-+]? hex+)? skip
8077 / [0-9]+ "." [0-9]+ ([eE] [-+]? [0-9]+)? skip
8078 / "0b" [01]+ "."? [eE] [-+]? [01]+ skip
8079 / "0o" [0-7]+ "."? [eE] [-+]? [0-7]+ skip
8080 / "0x" hex+ "."? [pP] [-+]? hex+ skip
8081 / [0-9]+ "."? [eE] [-+]? [0-9]+ skip
8082INTEGER
8083 <- "0b" [01]+ skip
8084 / "0o" [0-7]+ skip
8085 / "0x" hex+ skip
8086 / [0-9]+ skip
8087STRINGLITERAL
8088 <- "c"? "\"" string_char* "\"" skip
8089 / line_string skip
8090 / line_cstring skip
8091IDENTIFIER
8092 <- !keyword ("c" !["\\] / [A-Zabd-z_]) [A-Za-z0-9_]* skip
8093 / "@\"" string_char* "\"" skip
8094BUILTININDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip
8095
8096
8097AMPERSAND <- '&' ![=] skip
8098AMPERSANDEQUAL <- '&=' skip
8099ASTERISK <- '*' ![*%=] skip
8100ASTERISK2 <- '**' skip
8101ASTERISKEQUAL <- '*=' skip
8102ASTERISKPERCENT <- '*%' ![=] skip
8103ASTERISKPERCENTEQUAL <- '*%=' skip
8104CARET <- '^' ![=] skip
8105CARETEQUAL <- '^=' skip
8106COLON <- ':' skip
8107COMMA <- ',' skip
8108DOT <- '.' ![*.?] skip
8109DOT2 <- '..' ![.] skip
8110DOT3 <- '...' skip
8111DOTASTERISK <- '.*' skip
8112DOTQUESTIONMARK <- '.?' skip
8113EQUAL <- '=' ![>=] skip
8114EQUALEQUAL <- '==' skip
8115EQUALRARROW <- '=>' skip
8116EXCLAMATIONMARK <- '!' ![=] skip
8117EXCLAMATIONMARKEQUAL <- '!=' skip
8118LARROW <- '<' ![<=] skip
8119LARROW2 <- '<<' ![=] skip
8120LARROW2EQUAL <- '<<=' skip
8121LARROWEQUAL <- '<=' skip
8122LBRACE <- '{' skip
8123LBRACKET <- '[' skip
8124LPAREN <- '(' skip
8125MINUS <- '-' ![%=>] skip
8126MINUSEQUAL <- '-=' skip
8127MINUSPERCENT <- '-%' ![=] skip
8128MINUSPERCENTEQUAL <- '-%=' skip
8129MINUSRARROW <- '->' skip
8130PERCENT <- '%' ![=] skip
8131PERCENTEQUAL <- '%=' skip
8132PIPE <- '|' ![|=] skip
8133PIPE2 <- '||' skip
8134PIPEEQUAL <- '|=' skip
8135PLUS <- '+' ![%+=] skip
8136PLUS2 <- '++' skip
8137PLUSEQUAL <- '+=' skip
8138PLUSPERCENT <- '+%' ![=] skip
8139PLUSPERCENTEQUAL <- '+%=' skip
8140QUESTIONMARK <- '?' skip
8141RARROW <- '>' ![>=] skip
8142RARROW2 <- '>>' ![=] skip
8143RARROW2EQUAL <- '>>=' skip
8144RARROWEQUAL <- '>=' skip
8145RBRACE <- '}' skip
8146RBRACKET <- ']' skip
8147RPAREN <- ')' skip
8148SEMICOLON <- ';' skip
8149SLASH <- '/' ![=] skip
8150SLASHEQUAL <- '/=' skip
8151TILDE <- '~' skip
8152
8153end_of_word <- ![a-zA-Z0-9_] skip
8154KEYWORD_align <- 'align' end_of_word
8155KEYWORD_and <- 'and' end_of_word
8156KEYWORD_anyerror <- 'anyerror' end_of_word
8157KEYWORD_asm <- 'asm' end_of_word
8158KEYWORD_async <- 'async' end_of_word
8159KEYWORD_await <- 'await' end_of_word
8160KEYWORD_break <- 'break' end_of_word
8161KEYWORD_cancel <- 'cancel' end_of_word
8162KEYWORD_catch <- 'catch' end_of_word
8163KEYWORD_comptime <- 'comptime' end_of_word
8164KEYWORD_const <- 'const' end_of_word
8165KEYWORD_continue <- 'continue' end_of_word
8166KEYWORD_defer <- 'defer' end_of_word
8167KEYWORD_else <- 'else' end_of_word
8168KEYWORD_enum <- 'enum' end_of_word
8169KEYWORD_errdefer <- 'errdefer' end_of_word
8170KEYWORD_error <- 'error' end_of_word
8171KEYWORD_export <- 'export' end_of_word
8172KEYWORD_extern <- 'extern' end_of_word
8173KEYWORD_false <- 'false' end_of_word
8174KEYWORD_fn <- 'fn' end_of_word
8175KEYWORD_for <- 'for' end_of_word
8176KEYWORD_if <- 'if' end_of_word
8177KEYWORD_inline <- 'inline' end_of_word
8178KEYWORD_nakedcc <- 'nakedcc' end_of_word
8179KEYWORD_noalias <- 'noalias' end_of_word
8180KEYWORD_null <- 'null' end_of_word
8181KEYWORD_or <- 'or' end_of_word
8182KEYWORD_orelse <- 'orelse' end_of_word
8183KEYWORD_packed <- 'packed' end_of_word
8184KEYWORD_promise <- 'promise' end_of_word
8185KEYWORD_pub <- 'pub' end_of_word
8186KEYWORD_resume <- 'resume' end_of_word
8187KEYWORD_return <- 'return' end_of_word
8188KEYWORD_section <- 'section' end_of_word
8189KEYWORD_stdcallcc <- 'stdcallcc' end_of_word
8190KEYWORD_struct <- 'struct' end_of_word
8191KEYWORD_suspend <- 'suspend' end_of_word
8192KEYWORD_switch <- 'switch' end_of_word
8193KEYWORD_test <- 'test' end_of_word
8194KEYWORD_true <- 'true' end_of_word
8195KEYWORD_try <- 'try' end_of_word
8196KEYWORD_undefined <- 'undefined' end_of_word
8197KEYWORD_union <- 'union' end_of_word
8198KEYWORD_unreachable <- 'unreachable' end_of_word
8199KEYWORD_use <- 'use' end_of_word
8200KEYWORD_var <- 'var' end_of_word
8201KEYWORD_volatile <- 'volatile' end_of_word
8202KEYWORD_while <- 'while' end_of_word
8203
8204keyword <- KEYWORD_align / KEYWORD_and / KEYWORD_anyerror / KEYWORD_asm
8205 / KEYWORD_async / KEYWORD_await / KEYWORD_break / KEYWORD_cancel
8206 / KEYWORD_catch / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue
8207 / KEYWORD_defer / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer
8208 / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_false
8209 / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline
8210 / KEYWORD_nakedcc / KEYWORD_noalias / KEYWORD_null / KEYWORD_or
8211 / KEYWORD_orelse / KEYWORD_packed / KEYWORD_promise / KEYWORD_pub
8212 / KEYWORD_resume / KEYWORD_return / KEYWORD_section
8213 / KEYWORD_stdcallcc / KEYWORD_struct / KEYWORD_suspend
8214 / KEYWORD_switch / KEYWORD_test / KEYWORD_true / KEYWORD_try
8215 / KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable
8216 / KEYWORD_use / KEYWORD_var / KEYWORD_volatile / KEYWORD_while
8217</code></pre>
78778218 {#header_close#}
78788219 {#header_open|Zen#}
78798220 <ul>