diff options
author | metagn <metagngn@gmail.com> | 2023-06-06 07:53:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-06 06:53:21 +0200 |
commit | 2ab948ce53e3d9b80bf9b02644c8ec8991f34d0a (patch) | |
tree | 0382d24fc7fd4c09397bc56bf7dccc7ba5b19e42 /doc | |
parent | 0a212f97a5dd4d5dd1ea84f370bd27abe55a818e (diff) | |
download | Nim-2ab948ce53e3d9b80bf9b02644c8ec8991f34d0a.tar.gz |
post expr blocks colon fix + correct grammar (#21983)
* post expr blocks colon fix + correct grammar fixes #21982 * fix dochelpers * this is remarkably common * use head for unchained * fix atlas * final grammar fix
Diffstat (limited to 'doc')
-rw-r--r-- | doc/grammar.txt | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/doc/grammar.txt b/doc/grammar.txt index 89095d65c..e498dd2b2 100644 --- a/doc/grammar.txt +++ b/doc/grammar.txt @@ -28,8 +28,10 @@ operatorB = OP0 | OP1 | OP2 | OP3 | OP4 | OP5 | OP6 | OP7 | OP8 | OP9 | symbol = '`' (KEYW|IDENT|literal|(operator|'('|')'|'['|']'|'{'|'}'|'=')+)+ '`' | IDENT | 'addr' | 'type' | 'static' symbolOrKeyword = symbol | KEYW -exprColonEqExpr = expr (':'|'=' expr)? -exprEqExpr = expr ('=' expr)? +exprColonEqExpr = expr ((':'|'=') expr + / doBlock extraPostExprBlock*)? +exprEqExpr = expr ('=' expr + / doBlock extraPostExprBlock*)? exprList = expr ^+ comma optionalExprList = expr ^* comma exprColonEqExprList = exprColonEqExpr (comma exprColonEqExpr)* (comma)? @@ -43,7 +45,8 @@ par = '(' optInd ( &parKeyw (ifExpr / complexOrSimpleStmt) ^+ ';' | ';' (ifExpr / complexOrSimpleStmt) ^+ ';' | pragmaStmt - | simpleExpr ( ('=' expr (';' (ifExpr / complexOrSimpleStmt) ^+ ';' )? ) + | simpleExpr ( (doBlock extraPostExprBlock*) + | ('=' expr (';' (ifExpr / complexOrSimpleStmt) ^+ ';' )? ) | (':' expr (',' exprColonEqExpr ^+ ',' )? ) ) ) optPar ')' literal = | INT_LIT | INT8_LIT | INT16_LIT | INT32_LIT | INT64_LIT @@ -94,7 +97,7 @@ expr = (blockExpr simplePrimary = SIGILLIKEOP? identOrLiteral primarySuffix* commandStart = &('`'|IDENT|literal|'cast'|'addr'|'type'|'var'|'out'| 'static'|'enum'|'tuple'|'object'|'proc') -primary = simplePrimary (commandStart expr) +primary = simplePrimary (commandStart expr (doBlock extraPostExprBlock*)?)? / operatorB primary / routineExpr / rawTypeDesc @@ -106,14 +109,15 @@ typeDescExpr = (routineType / simpleExpr) ('not' expr)? typeDesc = rawTypeDesc / typeDescExpr typeDefValue = ((tupleDecl | enumDecl | objectDecl | conceptDecl | ('ref' | 'ptr' | 'distinct') (tupleDecl | objectDecl)) - / (simpleExpr (exprEqExpr ^+ comma postExprBlocks)?)) + / (simpleExpr (exprEqExpr ^+ comma postExprBlocks?)?)) ('not' expr)? -postExprBlocks = ':' stmt? ( IND{=} doBlock - | IND{=} 'of' exprList ':' stmt - | IND{=} 'elif' expr ':' stmt - | IND{=} 'except' optionalExprList ':' stmt - | IND{=} 'finally' ':' stmt - | IND{=} 'else' ':' stmt )* +extraPostExprBlock = ( IND{=} doBlock + | IND{=} 'of' exprList ':' stmt + | IND{=} 'elif' expr ':' stmt + | IND{=} 'except' optionalExprList ':' stmt + | IND{=} 'finally' ':' stmt + | IND{=} 'else' ':' stmt ) +postExprBlocks = (doBlock / ':' (extraPostExprBlock / stmt)) extraPostExprBlock* exprStmt = simpleExpr postExprBlocks? / simplePrimary (exprEqExpr ^+ comma) postExprBlocks? / simpleExpr '=' optInd (expr postExprBlocks?) |