-//
// 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"
+Comment ! = "//" ~[\n]* "\n"
| "/*" ~[\n]* "*/"
-ws ::= w**
-w ::= [\r\n ]
+ws = w**
+w = [\r\n ]
| Comment
-Statement ::= Move ";"? /ws
+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
+Destination = Port +/ (ws "," ws)
+Source = Port
| CodeBag
-CodeBag ::= CodeBagName? "{" Statement* "}" ";"? /ws
+CodeBag = CodeBagName? "{" Statement* "}" ";"? /ws
// Note: this deviates from ies06
-location ::= shipname ("." portname)?
-shipname ::= name index?
-portname ::= name index?
-name ::= [A-Za-z] [A-Za-z0-9\[\]\.]*
-index ::= "[" [0-9]+ "]"
+Port = shipname ("." portname)*
+shipname = name index?
+portname = name index?
+name = [A-Za-z] [A-Za-z0-9\[\]\.]*
+index = "[" [0-9]+ "]"
| [0-9]+