HUTN_service.py 2.4 KB

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