The goal of stage 06 is to try parse zig synax in lua. I pulled in lpeglable 1.2.0 and parser-gen off github to get started. All of this needs to be cleaned up rather soon. Lua boostraps using tcc and musl from the previous stage. Since musl 0.6.0 doesn't support dynamic linking this build of lua doesn't support shared libraries. I couldn't easily patch musl with dlopen and friends so instead I link statically and call deps with c api.
518 lines
No EOL
16 KiB
Text
518 lines
No EOL
16 KiB
Text
Root <- skip container_doc_comment? ContainerMembers eof
|
|
|
|
ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations)
|
|
|
|
ContainerDeclarations
|
|
<- TestDecl ContainerDeclarations
|
|
/ TopLevelComptime ContainerDeclarations
|
|
/ doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations
|
|
|
|
|
|
TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block
|
|
|
|
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? TypeExpr
|
|
|
|
VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
|
|
|
|
ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)?
|
|
|
|
Statement
|
|
<- KEYWORD_comptime? VarDecl
|
|
/ KEYWORD_comptime BlockExprStatement
|
|
/ KEYWORD_nosuspend BlockExprStatement
|
|
/ KEYWORD_suspend BlockExprStatement
|
|
/ KEYWORD_defer BlockExprStatement
|
|
/ KEYWORD_errdefer Payload? BlockExprStatement
|
|
/ IfStatement
|
|
/ LabeledStatement
|
|
/ SwitchExpr
|
|
/ AssignExpr SEMICOLON
|
|
|
|
IfStatement
|
|
<- IfPrefix BlockExpr ( KEYWORD_else Payload? Statement )?
|
|
/ IfPrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
|
|
|
|
LabeledStatement <- BlockLabel? (Block / LoopStatement)
|
|
|
|
LoopStatement <- KEYWORD_inline? (ForStatement / WhileStatement)
|
|
|
|
ForStatement
|
|
<- ForPrefix BlockExpr ( KEYWORD_else Statement )?
|
|
/ ForPrefix AssignExpr ( SEMICOLON / KEYWORD_else Statement )
|
|
|
|
WhileStatement
|
|
<- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )?
|
|
/ WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
|
|
|
|
BlockExprStatement
|
|
<- BlockExpr
|
|
/ AssignExpr SEMICOLON
|
|
|
|
BlockExpr <- BlockLabel? Block
|
|
|
|
AssignExpr <- Expr (AssignOp Expr)?
|
|
|
|
Expr <- BoolOrExpr
|
|
|
|
BoolOrExpr <- BoolAndExpr (KEYWORD_or BoolAndExpr)*
|
|
|
|
BoolAndExpr <- CompareExpr (KEYWORD_and CompareExpr)*
|
|
|
|
CompareExpr <- BitwiseExpr (CompareOp BitwiseExpr)?
|
|
|
|
BitwiseExpr <- BitShiftExpr (BitwiseOp BitShiftExpr)*
|
|
|
|
BitShiftExpr <- AdditionExpr (BitShiftOp AdditionExpr)*
|
|
|
|
AdditionExpr <- MultiplyExpr (AdditionOp MultiplyExpr)*
|
|
|
|
MultiplyExpr <- PrefixExpr (MultiplyOp PrefixExpr)*
|
|
|
|
PrefixExpr <- PrefixOp* PrimaryExpr
|
|
|
|
PrimaryExpr
|
|
<- AsmExpr
|
|
/ IfExpr
|
|
/ KEYWORD_break BreakLabel? Expr?
|
|
/ KEYWORD_comptime Expr
|
|
/ KEYWORD_nosuspend Expr
|
|
/ KEYWORD_continue BreakLabel?
|
|
/ KEYWORD_resume Expr
|
|
/ KEYWORD_return Expr?
|
|
/ BlockLabel? LoopExpr
|
|
/ Block
|
|
/ CurlySuffixExpr
|
|
|
|
IfExpr <- IfPrefix Expr (KEYWORD_else Payload? Expr)?
|
|
|
|
Block <- LBRACE Statement* RBRACE
|
|
|
|
LoopExpr <- KEYWORD_inline? (ForExpr / WhileExpr)
|
|
|
|
ForExpr <- ForPrefix Expr (KEYWORD_else Expr)?
|
|
|
|
WhileExpr <- WhilePrefix Expr (KEYWORD_else Payload? Expr)?
|
|
|
|
CurlySuffixExpr <- TypeExpr InitList?
|
|
|
|
InitList
|
|
<- LBRACE FieldInit (COMMA FieldInit)* COMMA? RBRACE
|
|
/ LBRACE Expr (COMMA Expr)* COMMA? RBRACE
|
|
/ LBRACE RBRACE
|
|
|
|
TypeExpr <- PrefixTypeOp* ErrorUnionExpr
|
|
|
|
ErrorUnionExpr <- SuffixExpr (EXCLAMATIONMARK TypeExpr)?
|
|
|
|
SuffixExpr
|
|
<- KEYWORD_async PrimaryTypeExpr SuffixOp* FnCallArguments
|
|
/ PrimaryTypeExpr (SuffixOp / FnCallArguments)*
|
|
|
|
PrimaryTypeExpr
|
|
<- BUILTINIDENTIFIER FnCallArguments
|
|
/ CHAR_LITERAL
|
|
/ ContainerDecl
|
|
/ DOT IDENTIFIER
|
|
/ DOT InitList
|
|
/ ErrorSetDecl
|
|
/ FLOAT
|
|
/ FnProto
|
|
/ GroupedExpr
|
|
/ LabeledTypeExpr
|
|
/ IDENTIFIER
|
|
/ IfTypeExpr
|
|
/ INTEGER
|
|
/ KEYWORD_comptime TypeExpr
|
|
/ KEYWORD_error DOT IDENTIFIER
|
|
/ KEYWORD_anyframe
|
|
/ KEYWORD_unreachable
|
|
/ STRINGLITERAL
|
|
/ SwitchExpr
|
|
|
|
ContainerDecl <- (KEYWORD_extern / KEYWORD_packed)? ContainerDeclAuto
|
|
|
|
ErrorSetDecl <- KEYWORD_error LBRACE IdentifierList RBRACE
|
|
|
|
GroupedExpr <- LPAREN Expr RPAREN
|
|
|
|
IfTypeExpr <- IfPrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
|
|
|
|
LabeledTypeExpr
|
|
<- BlockLabel Block
|
|
/ BlockLabel? LoopTypeExpr
|
|
|
|
LoopTypeExpr <- KEYWORD_inline? (ForTypeExpr / WhileTypeExpr)
|
|
|
|
ForTypeExpr <- ForPrefix TypeExpr (KEYWORD_else TypeExpr)?
|
|
|
|
WhileTypeExpr <- WhilePrefix TypeExpr (KEYWORD_else Payload? TypeExpr)?
|
|
|
|
SwitchExpr <- KEYWORD_switch LPAREN Expr RPAREN LBRACE SwitchProngList RBRACE
|
|
|
|
AsmExpr <- KEYWORD_asm KEYWORD_volatile? LPAREN Expr AsmOutput? RPAREN
|
|
|
|
AsmOutput <- COLON AsmOutputList AsmInput?
|
|
|
|
AsmOutputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN (MINUSRARROW TypeExpr / IDENTIFIER) RPAREN
|
|
|
|
AsmInput <- COLON AsmInputList AsmClobbers?
|
|
|
|
AsmInputItem <- LBRACKET IDENTIFIER RBRACKET STRINGLITERAL LPAREN Expr RPAREN
|
|
|
|
AsmClobbers <- COLON StringList
|
|
|
|
BreakLabel <- COLON IDENTIFIER
|
|
|
|
BlockLabel <- IDENTIFIER COLON
|
|
|
|
FieldInit <- DOT IDENTIFIER EQUAL Expr
|
|
|
|
WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN
|
|
|
|
LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN
|
|
|
|
CallConv <- KEYWORD_callconv LPAREN Expr RPAREN
|
|
|
|
ParamDecl
|
|
<- doc_comment? (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
|
|
/ DOT3
|
|
|
|
ParamType
|
|
<- KEYWORD_anytype
|
|
/ TypeExpr
|
|
|
|
IfPrefix <- KEYWORD_if LPAREN Expr RPAREN PtrPayload?
|
|
|
|
WhilePrefix <- KEYWORD_while LPAREN Expr RPAREN PtrPayload? WhileContinueExpr?
|
|
|
|
ForPrefix <- KEYWORD_for LPAREN Expr RPAREN PtrIndexPayload
|
|
|
|
Payload <- PIPE IDENTIFIER PIPE
|
|
|
|
PtrPayload <- PIPE ASTERISK? IDENTIFIER PIPE
|
|
|
|
PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE
|
|
|
|
|
|
SwitchProng <- SwitchCase EQUALRARROW PtrPayload? AssignExpr
|
|
|
|
SwitchCase
|
|
<- SwitchItem (COMMA SwitchItem)* COMMA?
|
|
/ KEYWORD_else
|
|
|
|
SwitchItem <- Expr (DOT3 Expr)?
|
|
|
|
AssignOp
|
|
<- ASTERISKEQUAL
|
|
/ SLASHEQUAL
|
|
/ PERCENTEQUAL
|
|
/ PLUSEQUAL
|
|
/ MINUSEQUAL
|
|
/ LARROW2EQUAL
|
|
/ RARROW2EQUAL
|
|
/ AMPERSANDEQUAL
|
|
/ CARETEQUAL
|
|
/ PIPEEQUAL
|
|
/ ASTERISKPERCENTEQUAL
|
|
/ PLUSPERCENTEQUAL
|
|
/ MINUSPERCENTEQUAL
|
|
/ EQUAL
|
|
|
|
CompareOp
|
|
<- EQUALEQUAL
|
|
/ EXCLAMATIONMARKEQUAL
|
|
/ LARROW
|
|
/ RARROW
|
|
/ LARROWEQUAL
|
|
/ RARROWEQUAL
|
|
|
|
BitwiseOp
|
|
<- AMPERSAND
|
|
/ CARET
|
|
/ PIPE
|
|
/ KEYWORD_orelse
|
|
/ KEYWORD_catch Payload?
|
|
|
|
BitShiftOp
|
|
<- LARROW2
|
|
/ RARROW2
|
|
|
|
AdditionOp
|
|
<- PLUS
|
|
/ MINUS
|
|
/ PLUS2
|
|
/ PLUSPERCENT
|
|
/ MINUSPERCENT
|
|
|
|
MultiplyOp
|
|
<- PIPE2
|
|
/ ASTERISK
|
|
/ SLASH
|
|
/ PERCENT
|
|
/ ASTERISK2
|
|
/ ASTERISKPERCENT
|
|
|
|
PrefixOp
|
|
<- EXCLAMATIONMARK
|
|
/ MINUS
|
|
/ TILDE
|
|
/ MINUSPERCENT
|
|
/ AMPERSAND
|
|
/ KEYWORD_try
|
|
/ KEYWORD_await
|
|
|
|
PrefixTypeOp
|
|
<- QUESTIONMARK
|
|
/ KEYWORD_anyframe MINUSRARROW
|
|
/ 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? (COLON Expr)?)?)? RBRACKET
|
|
/ DOT IDENTIFIER
|
|
/ DOTASTERISK
|
|
/ DOTQUESTIONMARK
|
|
|
|
FnCallArguments <- LPAREN ExprList RPAREN
|
|
|
|
SliceTypeStart <- LBRACKET (COLON Expr)? RBRACKET
|
|
|
|
PtrTypeStart
|
|
<- ASTERISK
|
|
/ ASTERISK2
|
|
/ LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
|
|
|
|
ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET
|
|
|
|
ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE
|
|
|
|
ContainerDeclType
|
|
<- KEYWORD_struct
|
|
/ KEYWORD_opaque
|
|
/ KEYWORD_enum (LPAREN Expr RPAREN)?
|
|
/ KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
|
|
|
|
ByteAlign <- KEYWORD_align LPAREN Expr RPAREN
|
|
|
|
IdentifierList <- (doc_comment? IDENTIFIER COMMA)* (doc_comment? IDENTIFIER)?
|
|
|
|
SwitchProngList <- (SwitchProng COMMA)* SwitchProng?
|
|
|
|
AsmOutputList <- (AsmOutputItem COMMA)* AsmOutputItem?
|
|
|
|
AsmInputList <- (AsmInputItem COMMA)* AsmInputItem?
|
|
|
|
StringList <- (STRINGLITERAL COMMA)* STRINGLITERAL?
|
|
|
|
ParamDeclList <- (ParamDecl COMMA)* ParamDecl?
|
|
|
|
ExprList <- (Expr COMMA)* Expr?
|
|
|
|
eof <- !.
|
|
bin <- [01]
|
|
bin_ <- '_'? bin
|
|
oct <- [0-7]
|
|
oct_ <- '_'? oct
|
|
hex <- [0-9a-fA-F]
|
|
hex_ <- '_'? hex
|
|
dec <- [0-9]
|
|
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]
|
|
|
|
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'"]
|
|
char_char
|
|
<- mb_utf8_literal
|
|
/ char_escape
|
|
/ ascii_char_not_nl_slash_squote
|
|
|
|
string_char
|
|
<- char_escape
|
|
/ [^\\"\n]
|
|
|
|
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_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" bin_int skip
|
|
/ "0o" oct_int skip
|
|
/ "0x" hex_int skip
|
|
/ dec_int skip
|
|
STRINGLITERALSINGLE <- "\"" string_char* "\"" skip
|
|
STRINGLITERAL
|
|
<- STRINGLITERALSINGLE
|
|
/ (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
|
|
|
|
|
|
AMPERSAND <- '&' ![=] skip
|
|
AMPERSANDEQUAL <- '&=' skip
|
|
ASTERISK <- '*' ![*%=] skip
|
|
ASTERISK2 <- '**' skip
|
|
ASTERISKEQUAL <- '*=' skip
|
|
ASTERISKPERCENT <- '*%' ![=] skip
|
|
ASTERISKPERCENTEQUAL <- '*%=' skip
|
|
CARET <- '^' ![=] skip
|
|
CARETEQUAL <- '^=' skip
|
|
COLON <- ':' skip
|
|
COMMA <- ',' skip
|
|
DOT <- '.' ![*.?] skip
|
|
DOT2 <- '..' ![.] skip
|
|
DOT3 <- '...' skip
|
|
DOTASTERISK <- '.*' skip
|
|
DOTQUESTIONMARK <- '.?' skip
|
|
EQUAL <- '=' ![>=] skip
|
|
EQUALEQUAL <- '==' skip
|
|
EQUALRARROW <- '=>' skip
|
|
EXCLAMATIONMARK <- '!' ![=] skip
|
|
EXCLAMATIONMARKEQUAL <- '!=' skip
|
|
LARROW <- '<' ![<=] skip
|
|
LARROW2 <- '<<' ![=] skip
|
|
LARROW2EQUAL <- '<<=' skip
|
|
LARROWEQUAL <- '<=' skip
|
|
LBRACE <- '{' skip
|
|
LBRACKET <- '[' skip
|
|
LPAREN <- '(' skip
|
|
MINUS <- '-' ![%=>] skip
|
|
MINUSEQUAL <- '-=' skip
|
|
MINUSPERCENT <- '-%' ![=] skip
|
|
MINUSPERCENTEQUAL <- '-%=' skip
|
|
MINUSRARROW <- '->' skip
|
|
PERCENT <- '%' ![=] skip
|
|
PERCENTEQUAL <- '%=' skip
|
|
PIPE <- '|' ![|=] skip
|
|
PIPE2 <- '||' skip
|
|
PIPEEQUAL <- '|=' skip
|
|
PLUS <- '+' ![%+=] skip
|
|
PLUS2 <- '++' skip
|
|
PLUSEQUAL <- '+=' skip
|
|
PLUSPERCENT <- '+%' ![=] skip
|
|
PLUSPERCENTEQUAL <- '+%=' skip
|
|
LETTERC <- 'c' skip
|
|
QUESTIONMARK <- '?' skip
|
|
RARROW <- '>' ![>=] skip
|
|
RARROW2 <- '>>' ![=] skip
|
|
RARROW2EQUAL <- '>>=' skip
|
|
RARROWEQUAL <- '>=' skip
|
|
RBRACE <- '}' skip
|
|
RBRACKET <- ']' skip
|
|
RPAREN <- ')' skip
|
|
SEMICOLON <- ';' skip
|
|
SLASH <- '/' ![=] skip
|
|
SLASHEQUAL <- '/=' skip
|
|
TILDE <- '~' skip
|
|
|
|
end_of_word <- ![a-zA-Z0-9_] skip
|
|
KEYWORD_align <- 'align' end_of_word
|
|
KEYWORD_allowzero <- 'allowzero' end_of_word
|
|
KEYWORD_and <- 'and' end_of_word
|
|
KEYWORD_anyframe <- 'anyframe' end_of_word
|
|
KEYWORD_anytype <- 'anytype' end_of_word
|
|
KEYWORD_asm <- 'asm' end_of_word
|
|
KEYWORD_async <- 'async' end_of_word
|
|
KEYWORD_await <- 'await' end_of_word
|
|
KEYWORD_break <- 'break' end_of_word
|
|
KEYWORD_callconv <- 'callconv' end_of_word
|
|
KEYWORD_catch <- 'catch' end_of_word
|
|
KEYWORD_comptime <- 'comptime' end_of_word
|
|
KEYWORD_const <- 'const' end_of_word
|
|
KEYWORD_continue <- 'continue' end_of_word
|
|
KEYWORD_defer <- 'defer' end_of_word
|
|
KEYWORD_else <- 'else' end_of_word
|
|
KEYWORD_enum <- 'enum' end_of_word
|
|
KEYWORD_errdefer <- 'errdefer' end_of_word
|
|
KEYWORD_error <- 'error' end_of_word
|
|
KEYWORD_export <- 'export' end_of_word
|
|
KEYWORD_extern <- 'extern' end_of_word
|
|
KEYWORD_fn <- 'fn' end_of_word
|
|
KEYWORD_for <- 'for' end_of_word
|
|
KEYWORD_if <- 'if' end_of_word
|
|
KEYWORD_inline <- 'inline' end_of_word
|
|
KEYWORD_noalias <- 'noalias' end_of_word
|
|
KEYWORD_nosuspend <- 'nosuspend' end_of_word
|
|
KEYWORD_noinline <- 'noinline' end_of_word
|
|
KEYWORD_opaque <- 'opaque' end_of_word
|
|
KEYWORD_or <- 'or' end_of_word
|
|
KEYWORD_orelse <- 'orelse' end_of_word
|
|
KEYWORD_packed <- 'packed' end_of_word
|
|
KEYWORD_pub <- 'pub' end_of_word
|
|
KEYWORD_resume <- 'resume' end_of_word
|
|
KEYWORD_return <- 'return' end_of_word
|
|
KEYWORD_linksection <- 'linksection' end_of_word
|
|
KEYWORD_struct <- 'struct' end_of_word
|
|
KEYWORD_suspend <- 'suspend' end_of_word
|
|
KEYWORD_switch <- 'switch' end_of_word
|
|
KEYWORD_test <- 'test' end_of_word
|
|
KEYWORD_threadlocal <- 'threadlocal' end_of_word
|
|
KEYWORD_try <- 'try' end_of_word
|
|
KEYWORD_union <- 'union' end_of_word
|
|
KEYWORD_unreachable <- 'unreachable' end_of_word
|
|
KEYWORD_usingnamespace <- 'usingnamespace' end_of_word
|
|
KEYWORD_var <- 'var' end_of_word
|
|
KEYWORD_volatile <- 'volatile' end_of_word
|
|
KEYWORD_while <- 'while' end_of_word
|
|
|
|
keyword <- 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_fn / KEYWORD_for / KEYWORD_if
|
|
/ KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
|
|
/ 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_try / KEYWORD_union / KEYWORD_unreachable
|
|
/ KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while |