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 |