HUTN_service.py 2.3 KB

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