Skip to content

Grammar

The full EBNF will live in compiler/README.md. This is the shape:

file = needs { statement }
needs = "needs" "[" { key set "," } "]"
statement = let | mut | fn | if | for | match | expr
let = "let" name [ ":" type ] "=" expr
expr = literal | path | name | call | list | record | expr "?" | expr "or" block
call = name "(" [ expr { "," expr } ] ")"
list = "[" [ expr { "," expr } ] "]"
record = "{" [ name ":" expr { "," name ":" expr } ] "}"