HUTN_service.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. import os
  8. init()
  9. login("HUTN", "HUTN")
  10. def compile_service(port):
  11. temp_file = ".tmp_%s" % port
  12. def compile_AL(code):
  13. code_fragments = code.split("\n")
  14. code_fragments = [i for i in code_fragments if i.strip() != ""]
  15. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  16. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  17. code_fragments = [i[initial_tabs:] for i in code_fragments]
  18. code_fragments.append("")
  19. code = "\n".join(code_fragments)
  20. with open(temp_file, "w") as f:
  21. f.write(code)
  22. f.flush()
  23. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
  24. os.remove(temp_file)
  25. return compiled
  26. def compile_model(code):
  27. code_fragments = code.split("\n")
  28. code_fragments = [i for i in code_fragments if i.strip() != ""]
  29. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  30. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  31. code_fragments = [i[initial_tabs:] for i in code_fragments]
  32. code_fragments.append("")
  33. code = "\n".join(code_fragments)
  34. with open(temp_file, "w") as f:
  35. f.write(code)
  36. f.flush()
  37. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/modelling.g", "M")
  38. os.remove(temp_file)
  39. return compiled
  40. mode = service_get(port)
  41. code = service_get(port)
  42. try:
  43. if mode == "code":
  44. compiled = compile_AL(code)
  45. service_set(port, "OK")
  46. [service_set(port, i) for i in compiled]
  47. elif mode == "model":
  48. compiled = compile_model(code)
  49. service_set(port, "OK")
  50. [service_set(port, i) for i in compiled]
  51. else:
  52. raise Exception("No such mode: " + mode)
  53. except Exception as e:
  54. service_set(port, str(e))
  55. raise
  56. service_register("compiler", compile_service)
  57. try:
  58. while raw_input() != "STOP":
  59. pass
  60. finally:
  61. service_stop()