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