| program |
::= |
def-list |
| def-list |
::= |
def | def def-list |
| def |
::= |
fundef | exndef | valdef | svcdef
|
| fundef |
::= |
fun var ( paramlist )
opt-type-expr = expr |
| |
| |
fun var ( ) opt-type-expr = expr |
| param |
::= |
var opt-type-expr |
| paramlist |
::= |
param | param paramlist
|
| exndef |
::= |
exception var |
| valdef |
::= |
val var opt-type-expr =
expr |
| svcdef |
::= |
svc var : type-expr
|
| opt-type-expr |
::= |
type-expr | e |
| type-expr |
::= |
void -> type-expr |
| |
| |
( type-params ) -> type-expr |
| |
| |
type-expr -> type-expr |
| |
| |
tuple-type
|
| type-params |
::= |
type-expr , type-params |
| |
| |
type-expr , type-expr |
| list-type |
::= |
type-atom |
| |
| |
list-type list |
| |
| |
list-type chunk |
| tuple-type |
::= |
list-type |
| |
| |
list-type * tuple-type
|
| type-atom |
::= |
base-type | ' var | ( type-expr ) |
| base-type |
::= |
unit | int | char | string | bool | host | port |
| |
| |
key | blob | exn | dev
|
| expr |
::= |
value |
| |
| |
op-expr |
| |
| |
if expr then expr else expr |
| |
| |
raise id |
| |
| |
try expr handle id => expr |
| |
| |
let def-list in expr end |
| |
| |
( expr-list ) |
| |
| |
( arg-list ) |
| |
| |
|id| ( arg-list ) |
| |
| |
|id| ( ) |
| arg-list |
::= |
expr | expr , arg-list |
| expr-list |
::= |
expr | expr ; expr-list
|
| value |
::= |
var | true | false | ()
| [] | [ expr-list ] |
| |
| |
int-literal | char-literal | string-literal
|
| op-expr |
::= |
id ( ) | id ( arg-list ) |
| |
| |
unary-op expr |
| |
| |
expr binary-op expr |
| |
| |
nary-op-expr
|
| unary-op |
::= |
~ | not | hd | tl | fst | snd | # int-literal | noti |
| |
| |
explode | implode | ord | chr |
| binary-op |
::= |
/ | % | * | + | --
| and | or | < | <= | >
| >=
| = | <> | :: | ^ |
| |
| |
<< | >> | xori | andi
| ori |
| nary-op-expr |
::= |
OnRemote ( expr , expr
, expr , expr ) |
| |
| |
OnNeighbor ( expr , expr , expr
) |
| |
| |
RetransOnRemote ( expr , expr ,
expr , expr , expr , expr ) |
| |
| |
foldr ( expr , expr , expr ) |
| |
| |
foldl ( expr , expr , expr )
|
| int-literal |
::= |
digit | nonzero-digit
digit-string |
| digit-string |
::= |
digit | digit digit-string |
| nonzero-digit |
::= |
[1 - 9] |
| digit |
::= |
[0 - 9]
|
| char-literal |
::= |
' character ' |
| character |
::= |
~[', \] | \\ | \n | \t | \b | \r |
\' | \"
|
| string-literal |
::= |
"" | " strchar-list " |
| strchar-list |
::= |
strchar | strchar strchar-list |
| strchar |
::= |
~[", \] | \\ | \n | \t | \b | \r |
\' | \"
|
| id |
::= |
var | var . id |
| var |
::= |
varstartchar | varstartchar varchar-list |
| varstartchar |
::= |
[ a - z, A - Z ] |
| varchar |
::= |
[ a - z, A - Z, 0 - 9, _ ] |
| varchar-list |
::= |
varchar | varchar varchar-list |