-//
// The FLEET Assembly Language Grammar
// As specified in document 2005-ucies06
-//
// comments are included where the grammar had to go beyond the strict
// "letter of the law" in ies06
-//
// Note that this is the *entire, complete* formal specification of
// the grammar. An equivalent lex+yacc grammar and support code would
// be several times as long.
-//
Comment !::= "//" ~[\n]* "\n"
| "/*" ~[\n]* "*/"
w ::= [\r\n ]
| Comment
+Program ::= Statement+ /ws
+
Statement ::= Move ";"? /ws
| "{" Statement* "}"
| Port "RENAMES" Port "ENDRENAME" ";" /ws
+// | "#define" Port Port /ws
-Move ::= Source ^"->" Destination /ws
- | Destination ^":=" Source /ws
+Move ::= Source ^"->" Destination /ws
+ | Source ^"=>" Destination /ws
+ | Destination ^":=" Source /ws
Destination ::= Port +/ (ws "," ws)
Source ::= Port
CodeBag ::= CodeBagName? "{" Statement* "}" ";"? /ws
// Note: this deviates from ies06
-location ::= shipname ("." portname)?
+Port ::= shipname ("." portname)*
shipname ::= name index?
portname ::= name index?
name ::= [A-Za-z] [A-Za-z0-9\[\]\.]*