HUTN_service.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. COMPILER_PATH = "interface/HUTN"
  2. import sys
  3. sys.path.append(COMPILER_PATH)
  4. sys.path.append("wrappers")
  5. from hutn_compiler.compiler import main as do_compile
  6. from modelverse import *
  7. init()
  8. login("HUTN", "HUTN")
  9. def compile_service(port):
  10. def compile_AL(code):
  11. code_fragments = code.split("\n")
  12. code_fragments = [i for i in code_fragments if i.strip() != ""]
  13. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  14. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  15. code_fragments = [i[initial_tabs:] for i in code_fragments]
  16. code_fragments.append("")
  17. code = "\n".join(code_fragments)
  18. with open(".code.alc", "w") as f:
  19. f.write(code)
  20. f.flush()
  21. compiled = do_compile(".code_%s.alc" % port, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
  22. return compiled
  23. def compile_model(code):
  24. code_fragments = code.split("\n")
  25. code_fragments = [i for i in code_fragments if i.strip() != ""]
  26. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  27. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  28. code_fragments = [i[initial_tabs:] for i in code_fragments]
  29. code_fragments.append("")
  30. code = "\n".join(code_fragments)
  31. with open(".model.mvc", "w") as f:
  32. f.write(code)
  33. f.flush()
  34. return do_compile(".model.mvc", COMPILER_PATH + "/grammars/modelling.g", "M")
  35. mode = service_get(port)
  36. code = service_get(port)
  37. try:
  38. if mode == "code":
  39. service_set(port, "OK")
  40. compiled = compile_AL(code)
  41. [service_set(port, i) for i in compiled]
  42. elif mode == "model":
  43. service_set(port, "OK")
  44. compiled = compile_model(code)
  45. [service_set(port, i) for i in compiled]
  46. else:
  47. raise Exception("No such mode: " + mode)
  48. except Exception as e:
  49. service_set(port, str(e))
  50. service_register("compiler", compile_service)
  51. try:
  52. while raw_input() != "STOP":
  53. pass
  54. finally:
  55. service_stop()