--- /dev/null
+// A grammar for assembling archsim networks
+
+s = !ws (Statement +/ ws) !ws
+
+Statement = Import | Instance | Settings | Operations
+
+Settings = "settings" (Setting+/newline) /newline
+Setting = Name ^"=" quoted /ws
+
+Import = ^"import" JavaClassName "as" Type /ws
+JavaClassName = Name +/ "."
+
+Instance = ^"component" !ws ComponentName !ws ":" !ws Type (!newline Connection +/ newline)?
+
+Connection = Port ^"->" ForeignPort /ws
+ | Port ^"<-" ForeignPort /ws
+
+ForeignPort = ComponentName ^"." Port
+
+Type = Name
+Port = Name
+ComponentName = Name
+Name = string:: [a-zA-Z0-9_]++
+
+quoted = "\"" ~[\"]* "\""
+newline = !ws "\n" !ws
+ws = [\r\n ]**
+ | [\r\n ]** !Comment !ws
+Comment = "//" ~[\n]* "\n"
+ | "/*" ~[\n]* "*/"
+
+Operations = ^"operations" (Operation+/newline) /newline
+Operation = ^"build_GASP_model"
+ | ^"output" quoted /ws
+ | ^"journal" quoted /ws
+ | ^"error" quoted /ws
+ | ^"info" quoted /ws
+ | ^"run" [0-9]++ /ws
+ | ^"step" [0-9]++ /ws
+ | ^"self_check"
+ | ^"reset"
+ | ^"print_parameters"
+ | ^"print_components"
+ | ^"print_model"
+ | ^"print_model_description"