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