HUTN_service.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. print("INIT HUTN")
  11. init(sys.argv[1])
  12. print("INITTED HUTN")
  13. login("HUTN", "HUTN")
  14. def clean_code(code):
  15. if code == "":
  16. return code
  17. code_fragments = code.split("\n")
  18. code_fragments = [i.rstrip() for i in code_fragments if i.strip() != ""]
  19. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  20. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  21. code_fragments = [i[initial_tabs:] for i in code_fragments]
  22. code_fragments.append("")
  23. code = "\n".join(code_fragments)
  24. return code
  25. def compile_service(port):
  26. start = time.time()
  27. temp_file = ".tmp_%s" % port
  28. def compile_AL(code):
  29. code = clean_code(code)
  30. if code == "":
  31. return [0]
  32. with open(temp_file, "w") as f:
  33. f.write(code)
  34. f.flush()
  35. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
  36. os.remove(temp_file)
  37. return compiled
  38. def compile_model(code):
  39. code = clean_code(code)
  40. if code == "":
  41. return [0]
  42. with open(temp_file, "w") as f:
  43. f.write(code)
  44. f.flush()
  45. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/modelling.g", "M")
  46. os.remove(temp_file)
  47. return compiled
  48. mode = service_get(port)
  49. code = service_get(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. service_register("compiler", compile_service)
  66. try:
  67. while raw_input() != "STOP":
  68. pass
  69. finally:
  70. service_stop()