Skip to content

Latest commit

 

History

History
52 lines (39 loc) · 1.95 KB

File metadata and controls

52 lines (39 loc) · 1.95 KB
dyvil v0.34.0

Statements

statement : statementList | ifStatement | whileStatement | repeatStatement
          | forStatement | forEachStatement | syncStatement | tryStatement | bytecode
          | throwStatement | jumpStatement

statementList : '{' '}'
              | '{' statementListPart { semi statementListPart } '}'
statementListPart : label? ( expression | member )
label : identifier ':'

variableDeclaration : attributes? ( 'var' | 'let' ) identifier typeAscription?
variable : variableDeclaration '=' expression

ifStatement : 'if' ifStatementHead expression ( semi? 'else' expression )?
ifStatementHead : expressionNoClosure
                | 'let' identifier typeAscription? '=' expressionNoClosure

matchExpression : expression '.'? 'match' matchBody
                | 'match' expressionNoClosure matchBody
matchBody : caseExpression | caseList
caseList : '{' '}' '{' caseExpresssion { semi caseExpression }? '}'
# caseExpression is declared in Expressions/Patterns

whileStatement : 'while' expressionNoClosure expression

repeatStatement : 'repeat' expression ( semi? 'while' expression )?

forStatement : 'for' '(' variable? semi expression? semi expression? ')' expression
             | 'for' variable semi expression? semi expressionNoClosure? statementList
             
forEachStatement : 'for' '(' variableDeclaration '<-' expression ')' expression
                 | 'for' variableDeclaration '<-' expressionNoClosure statementList

syncStatement : 'synchronized' expressionNoClosure expression

tryStatement : 'try' expression { catchStatement } finallyStatement?
catchStatement : 'catch' '(' variableDeclaration ')' expression
               | 'catch' variableDeclaration statementList
finallyStatement : 'finally' expression

throwStatement : 'throw' expression

jumpStatement : breakStatement | continueStatement | gotoStatement
breakStatement : 'break' identifier?
continueStatement : 'continue' identifier?
gotoStatement : 'goto' identifier