|
@@ -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()
|