fleet grammar updates
[sbp.git] / tests / fleet.g
index 3f70ddf..965a712 100644 (file)
@@ -14,31 +14,42 @@ Comment        = "//" ~[\n]* "\n"
 w             = [\r\n ]*
 ws            = (w | Comment)* -> ~[\r\n ]
 
-s              = !ws Program !ws
-Program        = CodeBag:: statements:(Statement +/ ws)
+s              = ws! Program ws!
+Program        = Program::
+                    (Directive ws!)*
+                    CodeBagBody
 
-Statement      = Move !((ws ";")?)
+Directive      = Memory::  "#memory" "{" (int +/ (ws! "," ws!)) "}" /ws
+               | Import::  "#import" [A-Za-z_.]++ /ws
+               | Ship::    "#ship" shipname ":" [A-Za-z_\.]++ /ws
+
+
+Statement      = Move ((ws ";")?)!
                | CodeBag
-               | ^"#define" Port Port                  /ws
+//             | ^"#define" Port Port                  /ws
 
 Move           = Source       ^"->"  Destination        /ws
                | Source       ^"->*" Destination        /ws
                | Port         ^":="  Source             /ws
 
-Destination    = Port +/ (!ws "," !ws)
+Destination    = Port +/ (ws! "," ws!)
 Source         = Port
                | CodeBag
-
-CodeBag        = CodeBag::
-                     name:(name !ws ":" !ws)?
+CodeBagBody    = CodeBag:: (Statement +/ ws)
+CodeBag        = NamedCodeBag::
+                     name:(name ws! ":" ws!)?
                      "{"
-                           !ws statements:(Statement +/ ws) !ws
+                           ws! statements:(Statement +/ ws) ws!
                      "}"
-                     (!ws ";")?
-
-Port           = Port::     shipname ("." portname)*
-shipname       = ShipName:: name index?
-portname       = PortName:: name index?
-name           = [A-Za-z0-9\[\]\.]**
+                     (ws! ";")?!
+
+//Port           = Port::     shipname ("." portname)*
+Port           = Port::     shipname "." portname
+               | Port::     shipname
+shipname       = ShipName:: name (index?)
+portname       = PortName:: name (index?)
+name           = [A-Za-z0-9\[\]]**
 index          = "[" [0-9]+ "]"
                | [0-9]+
+int            = [0-9]++
+