123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- # This file is generated by compiler/parser.nim.
- module = complexOrSimpleStmt ^* (';' / IND{=})
- comma = ',' COMMENT?
- semicolon = ';' COMMENT?
- colon = ':' COMMENT?
- colcom = ':' COMMENT?
- operator = OP0 | OP1 | OP2 | OP3 | OP4 | OP5 | OP6 | OP7 | OP8 | OP9
- | 'or' | 'xor' | 'and'
- | 'is' | 'isnot' | 'in' | 'notin' | 'of' | 'as' | 'from'
- | 'div' | 'mod' | 'shl' | 'shr' | 'not' | '..'
- prefixOperator = operator
- optInd = COMMENT? IND?
- optPar = (IND{>} | IND{=})?
- simpleExpr = arrowExpr (OP0 optInd arrowExpr)* pragma?
- arrowExpr = assignExpr (OP1 optInd assignExpr)*
- assignExpr = orExpr (OP2 optInd orExpr)*
- orExpr = andExpr (OP3 optInd andExpr)*
- andExpr = cmpExpr (OP4 optInd cmpExpr)*
- cmpExpr = sliceExpr (OP5 optInd sliceExpr)*
- sliceExpr = ampExpr (OP6 optInd ampExpr)*
- ampExpr = plusExpr (OP7 optInd plusExpr)*
- plusExpr = mulExpr (OP8 optInd mulExpr)*
- mulExpr = dollarExpr (OP9 optInd dollarExpr)*
- dollarExpr = primary (OP10 optInd primary)*
- operatorB = OP0 | OP1 | OP2 | OP3 | OP4 | OP5 | OP6 | OP7 | OP8 | OP9 |
- 'div' | 'mod' | 'shl' | 'shr' | 'in' | 'notin' |
- 'is' | 'isnot' | 'not' | 'of' | 'as' | 'from' | '..' | 'and' | 'or' | 'xor'
- symbol = '`' (KEYW|IDENT|literal|(operator|'('|')'|'['|']'|'{'|'}'|'=')+)+ '`'
- | IDENT | 'addr' | 'type' | 'static'
- symbolOrKeyword = symbol | KEYW
- exprColonEqExpr = expr ((':'|'=') expr
- / doBlock extraPostExprBlock*)?
- exprEqExpr = expr ('=' expr
- / doBlock extraPostExprBlock*)?
- exprList = expr ^+ comma
- optionalExprList = expr ^* comma
- exprColonEqExprList = exprColonEqExpr (comma exprColonEqExpr)* (comma)?
- qualifiedIdent = symbol ('.' optInd symbolOrKeyword)?
- setOrTableConstr = '{' ((exprColonEqExpr comma)* | ':' ) '}'
- castExpr = 'cast' ('[' optInd typeDesc optPar ']' '(' optInd expr optPar ')') /
- parKeyw = 'discard' | 'include' | 'if' | 'while' | 'case' | 'try'
- | 'finally' | 'except' | 'for' | 'block' | 'const' | 'let'
- | 'when' | 'var' | 'mixin'
- par = '(' optInd
- ( &parKeyw (ifExpr / complexOrSimpleStmt) ^+ ';'
- | ';' (ifExpr / complexOrSimpleStmt) ^+ ';'
- | pragmaStmt
- | simpleExpr ( (doBlock extraPostExprBlock*)
- | ('=' expr (';' (ifExpr / complexOrSimpleStmt) ^+ ';' )? )
- | (':' expr (',' exprColonEqExpr ^+ ',' )? ) ) )
- optPar ')'
- literal = | INT_LIT | INT8_LIT | INT16_LIT | INT32_LIT | INT64_LIT
- | UINT_LIT | UINT8_LIT | UINT16_LIT | UINT32_LIT | UINT64_LIT
- | FLOAT_LIT | FLOAT32_LIT | FLOAT64_LIT
- | STR_LIT | RSTR_LIT | TRIPLESTR_LIT
- | CHAR_LIT | CUSTOM_NUMERIC_LIT
- | NIL
- generalizedLit = GENERALIZED_STR_LIT | GENERALIZED_TRIPLESTR_LIT
- identOrLiteral = generalizedLit | symbol | literal
- | par | arrayConstr | setOrTableConstr | tupleConstr
- | castExpr
- tupleConstr = '(' optInd (exprColonEqExpr comma?)* optPar ')'
- arrayConstr = '[' optInd (exprColonEqExpr comma?)* optPar ']'
- primarySuffix = '(' (exprColonEqExpr comma?)* ')'
- | '.' optInd symbolOrKeyword ('[:' exprList ']' ( '(' exprColonEqExpr ')' )?)? generalizedLit?
- | DOTLIKEOP optInd symbolOrKeyword generalizedLit?
- | '[' optInd exprColonEqExprList optPar ']'
- | '{' optInd exprColonEqExprList optPar '}'
- pragma = '{.' optInd (exprColonEqExpr comma?)* optPar ('.}' | '}')
- identVis = symbol OPR? # postfix position
- identVisDot = symbol '.' optInd symbolOrKeyword OPR?
- identWithPragma = identVis pragma?
- identWithPragmaDot = identVisDot pragma?
- declColonEquals = identWithPragma (comma identWithPragma)* comma?
- (':' optInd typeDescExpr)? ('=' optInd expr)?
- identColonEquals = IDENT (comma IDENT)* comma?
- (':' optInd typeDescExpr)? ('=' optInd expr)?)
- tupleTypeBracket = '[' optInd (identColonEquals (comma/semicolon)?)* optPar ']'
- tupleType = 'tuple' tupleTypeBracket
- tupleDecl = 'tuple' (tupleTypeBracket /
- COMMENT? (IND{>} identColonEquals (IND{=} identColonEquals)*)?)
- paramList = '(' declColonEquals ^* (comma/semicolon) ')'
- paramListArrow = paramList? ('->' optInd typeDesc)?
- paramListColon = paramList? (':' optInd typeDesc)?
- doBlock = 'do' paramListArrow pragma? colcom stmt
- routineExpr = ('proc' | 'func' | 'iterator') paramListColon pragma? ('=' COMMENT? stmt)?
- routineType = ('proc' | 'iterator') paramListColon pragma?
- forStmt = 'for' ((varTuple / identWithPragma) ^+ comma) 'in' expr colcom stmt
- forExpr = forStmt
- expr = (blockExpr
- | ifExpr
- | whenExpr
- | caseStmt
- | forExpr
- | tryExpr)
- / simpleExpr
- simplePrimary = SIGILLIKEOP? identOrLiteral primarySuffix*
- commandStart = &('`'|IDENT|literal|'cast'|'addr'|'type'|'var'|'out'|
- 'static'|'enum'|'tuple'|'object'|'proc')
- primary = simplePrimary (commandStart expr (doBlock extraPostExprBlock*)?)?
- / operatorB primary
- / routineExpr
- / rawTypeDesc
- / prefixOperator primary
- rawTypeDesc = (tupleType | routineType | 'enum' | 'object' |
- ('var' | 'out' | 'ref' | 'ptr' | 'distinct') typeDesc?)
- ('not' primary)?
- typeDescExpr = (routineType / simpleExpr) ('not' primary)?
- typeDesc = rawTypeDesc / typeDescExpr
- typeDefValue = ((tupleDecl | enumDecl | objectDecl | conceptDecl |
- ('ref' | 'ptr' | 'distinct') (tupleDecl | objectDecl))
- / (simpleExpr (exprEqExpr ^+ comma postExprBlocks?)?))
- ('not' primary)?
- 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?)
- importStmt = 'import' optInd expr
- ((comma expr)*
- / 'except' optInd (expr ^+ comma))
- exportStmt = 'export' optInd expr
- ((comma expr)*
- / 'except' optInd (expr ^+ comma))
- includeStmt = 'include' optInd expr ^+ comma
- fromStmt = 'from' expr 'import' optInd expr (comma expr)*
- returnStmt = 'return' optInd expr?
- raiseStmt = 'raise' optInd expr?
- yieldStmt = 'yield' optInd expr?
- discardStmt = 'discard' optInd expr?
- breakStmt = 'break' optInd expr?
- continueStmt = 'continue' optInd expr?
- condStmt = expr colcom stmt COMMENT?
- (IND{=} 'elif' expr colcom stmt)*
- (IND{=} 'else' colcom stmt)?
- ifStmt = 'if' condStmt
- whenStmt = 'when' condStmt
- condExpr = expr colcom stmt optInd
- ('elif' expr colcom stmt optInd)*
- 'else' colcom stmt
- ifExpr = 'if' condExpr
- whenExpr = 'when' condExpr
- whileStmt = 'while' expr colcom stmt
- ofBranch = 'of' exprList colcom stmt
- ofBranches = ofBranch (IND{=} ofBranch)*
- (IND{=} 'elif' expr colcom stmt)*
- (IND{=} 'else' colcom stmt)?
- caseStmt = 'case' expr ':'? COMMENT?
- (IND{>} ofBranches DED
- | IND{=} ofBranches)
- tryStmt = 'try' colcom stmt &(IND{=}? 'except'|'finally')
- (IND{=}? 'except' optionalExprList colcom stmt)*
- (IND{=}? 'finally' colcom stmt)?
- tryExpr = 'try' colcom stmt &(optInd 'except'|'finally')
- (optInd 'except' optionalExprList colcom stmt)*
- (optInd 'finally' colcom stmt)?
- blockStmt = 'block' symbol? colcom stmt
- blockExpr = 'block' symbol? colcom stmt
- staticStmt = 'static' colcom stmt
- deferStmt = 'defer' colcom stmt
- asmStmt = 'asm' pragma? (STR_LIT | RSTR_LIT | TRIPLESTR_LIT)
- genericParam = symbol (comma symbol)* (colon expr)? ('=' optInd expr)?
- genericParamList = '[' optInd
- genericParam ^* (comma/semicolon) optPar ']'
- pattern = '{' stmt '}'
- indAndComment = (IND{>} COMMENT)? | COMMENT?
- routine = optInd identVis pattern? genericParamList?
- paramListColon pragma? ('=' COMMENT? stmt)? indAndComment
- commentStmt = COMMENT
- section(RULE) = COMMENT? RULE / (IND{>} (RULE / COMMENT)^+IND{=} DED)
- enumDecl = 'enum' optInd (symbol pragma? optInd ('=' optInd expr COMMENT?)? comma?)+
- objectWhen = 'when' expr colcom objectPart COMMENT?
- ('elif' expr colcom objectPart COMMENT?)*
- ('else' colcom objectPart COMMENT?)?
- objectBranch = 'of' exprList colcom objectPart
- objectBranches = objectBranch (IND{=} objectBranch)*
- (IND{=} 'elif' expr colcom objectPart)*
- (IND{=} 'else' colcom objectPart)?
- objectCase = 'case' declColonEquals ':'? COMMENT?
- (IND{>} objectBranches DED
- | IND{=} objectBranches)
- objectPart = IND{>} objectPart^+IND{=} DED
- / objectWhen / objectCase / 'nil' / 'discard' / declColonEquals
- objectDecl = 'object' ('of' typeDesc)? COMMENT? objectPart
- conceptParam = ('var' | 'out' | 'ptr' | 'ref' | 'static' | 'type')? symbol
- conceptDecl = 'concept' conceptParam ^* ',' (pragma)? ('of' typeDesc ^* ',')?
- &IND{>} stmt
- typeDef = identVisDot genericParamList? pragma '=' optInd typeDefValue
- indAndComment?
- varTupleLhs = '(' optInd (identWithPragma / varTupleLhs) ^+ comma optPar ')' (':' optInd typeDescExpr)?
- varTuple = varTupleLhs '=' optInd expr
- colonBody = colcom stmt postExprBlocks?
- variable = (varTuple / identColonEquals) colonBody? indAndComment
- constant = (varTuple / identWithPragma) (colon typeDesc)? '=' optInd expr indAndComment
- bindStmt = 'bind' optInd qualifiedIdent ^+ comma
- mixinStmt = 'mixin' optInd qualifiedIdent ^+ comma
- pragmaStmt = pragma (':' COMMENT? stmt)?
- simpleStmt = ((returnStmt | raiseStmt | yieldStmt | discardStmt | breakStmt
- | continueStmt | pragmaStmt | importStmt | exportStmt | fromStmt
- | includeStmt | commentStmt) / exprStmt) COMMENT?
- complexOrSimpleStmt = (ifStmt | whenStmt | whileStmt
- | tryStmt | forStmt
- | blockStmt | staticStmt | deferStmt | asmStmt
- | 'proc' routine
- | 'method' routine
- | 'func' routine
- | 'iterator' routine
- | 'macro' routine
- | 'template' routine
- | 'converter' routine
- | 'type' section(typeDef)
- | 'const' section(constant)
- | ('let' | 'var' | 'using') section(variable)
- | bindStmt | mixinStmt)
- / simpleStmt
- stmt = (IND{>} complexOrSimpleStmt^+(IND{=} / ';') DED)
- / simpleStmt ^+ ';'
|