Browse Source

Add HUTN service for compilation

Yentl Van Tendeloo 8 years ago
parent
commit
8640fe92e2
1 changed files with 63 additions and 0 deletions
  1. 63 0
      scripts/HUTN_service.py

+ 63 - 0
scripts/HUTN_service.py

@@ -0,0 +1,63 @@
+COMPILER_PATH = "interface/HUTN"
+
+import sys
+sys.path.append(COMPILER_PATH)
+sys.path.append("wrappers")
+from hutn_compiler.compiler import main as do_compile
+from modelverse import *
+
+init()
+login("HUTN", "HUTN")
+
+def compile_service(port):
+    def compile_AL(code):
+        code_fragments = code.split("\n")
+        code_fragments = [i for i in code_fragments if i.strip() != ""]
+        code_fragments = [i.replace("    ", "\t") for i in code_fragments]
+        initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
+        code_fragments = [i[initial_tabs:] for i in code_fragments]
+        code_fragments.append("")
+        code = "\n".join(code_fragments)
+
+        with open(".code.alc", "w") as f:
+            f.write(code)
+            f.flush()
+
+        compiled = do_compile(".code_%s.alc" % port, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
+        return compiled
+
+    def compile_model(code):
+        code_fragments = code.split("\n")
+        code_fragments = [i for i in code_fragments if i.strip() != ""]
+        code_fragments = [i.replace("    ", "\t") for i in code_fragments]
+        initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
+        code_fragments = [i[initial_tabs:] for i in code_fragments]
+        code_fragments.append("")
+        code = "\n".join(code_fragments)
+
+        with open(".model.mvc", "w") as f:
+            f.write(code)
+            f.flush()
+
+        return do_compile(".model.mvc", COMPILER_PATH + "/grammars/modelling.g", "M") + ["exit"]
+
+    mode = service_get(port)
+    code = service_get(port)
+    try:
+        if mode == "code":
+            compiled = compile_AL(code)
+            [service_set(port, i) for i in compiled]
+        elif mode == "model":
+            compiled = compile_model(code)
+            [service_set(port, i) for i in compiled]
+        else:
+            raise Exception("No such mode: " + mode)
+    except Exception as e:
+        service_set(port, str(e))
+
+service_register("compiler", compile_service)
+try:
+    while raw_input() != "STOP":
+        pass
+finally:
+    service_stop()