3 Def = Id "(" (Id+/comma) "->" (Id+/comma) ")" "=" Exprs /ws
8 ((Expr +/ ws) +/ semicolons)
10 Decl = Id ^"::" ShipName /ws
12 Expr = "{" Exprs "}" /ws
13 | (Literal|Port) ^"-->" Ports /ws
14 | (Literal|Port) ws! ^"-[" Int "]->" ws! Ports
15 | (Literal|Port) ^"-[*]->" Ports /ws
16 // | "if" "then" "else"
23 Literal = Int | ^"{" Int +/ comma "}" /ws
25 ShipName = "":: [A-Z] [a-zA-Z0-9_]*
26 Id = "":: [a-z] [a-zA-Z0-9_]*
28 Comment = "//" (~eol)* eol!
29 | "/*" (any* &~ (any*! "*/" any*!)) "*/"
30 ws = (wsc | Comment)* -> ~wsc
32 wsc = [\r\n ] | \{ | \}
34 semicolons = ws! ";;" ws!