HUTN_service.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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_coded 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. start = time.time()
  25. temp_file = ".tmp_%s" % port
  26. def compile_AL(code):
  27. code = clean_code(code)
  28. if code == "":
  29. return [0]
  30. with open(temp_file, "w") as f:
  31. f.write(code)
  32. f.flush()
  33. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
  34. os.remove(temp_file)
  35. return compiled
  36. def compile_model(code):
  37. code = clean_code(code)
  38. if code == "":
  39. return [0]
  40. with open(temp_file, "w") as f:
  41. f.write(code)
  42. f.flush()
  43. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/modelling.g", "M")
  44. os.remove(temp_file)
  45. return compiled
  46. mode = service_get(port)
  47. code = service_get(port)
  48. try:
  49. if mode == "code":
  50. compiled = compile_AL(code)
  51. service_set(port, "OK")
  52. service_set(port, compiled)
  53. elif mode == "model":
  54. compiled = compile_model(code)
  55. service_set(port, "OK")
  56. service_set(port, compiled)
  57. else:
  58. raise Exception("No such mode: " + mode)
  59. except Exception as e:
  60. service_set(port, str(e))
  61. raise
  62. print("Compile took %ss" % (time.time() - start))
  63. service_register("compiler", compile_service)
  64. try:
  65. while raw_input() != "STOP":
  66. pass
  67. except EOFError:
  68. import time
  69. while 1:
  70. time.sleep(1.0)
  71. finally:
  72. service_stop()