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 * import os init() login("HUTN", "HUTN") def compile_service(port): temp_file = ".tmp_%s" % 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(temp_file, "w") as f: f.write(code) f.flush() compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/actionlanguage.g", "CS") os.remove(temp_file) 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(temp_file, "w") as f: f.write(code) f.flush() compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/modelling.g", "M") os.remove(temp_file) return compiled mode = service_get(port) code = service_get(port) try: if mode == "code": compiled = compile_AL(code) service_set(port, "OK") [service_set(port, i) for i in compiled] elif mode == "model": compiled = compile_model(code) service_set(port, "OK") [service_set(port, i) for i in compiled] else: raise Exception("No such mode: " + mode) except Exception as e: service_set(port, str(e)) raise service_register("compiler", compile_service) try: while raw_input() != "STOP": pass finally: service_stop()