Language grammar
program: statementline*
statementline: statement endline
statement: assertion | assignment | blankline | blockend | const | else | forloop |
function | generator | ifthen | import | method | mutation | object | task | var | while | yield
assertion: 'assert' expression
assignment: target '=' expression
blankline: /* empty */
blockend: 'end' [identifier | 'if' | 'while']
const: 'const' identifier '=' expression
else: 'else' ['if' expression] ':'
forloop: 'for' identifier 'in' expression ':'
function: 'function' identifier ['(' expression ')'] {':' | '=' expression}
generator: 'generator' identifier ['(' expression ')'] ':'
ifthen: 'if' expression ':'
import: 'import' identifier ['from' expression]
method: 'method' identifier ['(' expression ')'] ':'
mutation: identifier '->' identifier ['(' arguments ')']
object: 'object' identifier ['(' expression ')'] ':'
task: 'task' identifier ['(' expression ')'] ':'
var: 'var' identifier '=' expression
while: 'while' expression ':'
yield: 'yield' expression
target: (item ',')* item
item: identifier | '(' target ')'
expression: term [op term]*
term: primary postfix*
primary: evaluation | negation | inversion | literal | subexpression | array | map | invoke | capture | throw | comprehension
evaluation: identifier [ '(' arguments ')' ]
postfix: '[' arguments ']' | '.' evaluation
arguments: expression
negation: '-' expression
inversion: 'not' expression
literal: number | string | 'true' | 'false' | 'nil'
subexpression: '(' expression ')'
array: '[' expression ']'
map: '{' expression '}'
invoke: 'invoke' '(' expression [':' arguments] ')'
capture: 'capture' '(' expression [':' expression] ')'
throw: 'throw' '(' expression ')' | '☠' expression
comprehension: 'each' [ expression 'from'] expression 'in' expression ['where' expression]
op: ',' | 'if' | 'else' | '<' | '>' | '=' | '≠' | '≤' | '≥' | '+' | '-' | '*' | '÷' | 'mod' | '**' | '<<' | '>>' | 'and' | 'or' | 'xor' | 'as' | '&' | '=>'
(alternative ascii spellings are '!=', '<=', '>=', and '/')
Reserved words
and as assert capture const each else end extern false for from function generator has if import in invoke method mod nil not object or task then throw true var where while xor yield