main.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. def clean_code(code):
  10. if code == "":
  11. return code
  12. code_fragments = code.split("\n")
  13. code_fragments = [i.rstrip() for i in code_fragments if i.strip() != ""]
  14. code_fragments = [i.replace(" ", "\t") for i in code_fragments]
  15. initial_tabs = min([len(i) - len(i.lstrip("\t")) for i in code_fragments])
  16. code_fragments = [i[initial_tabs:] for i in code_fragments]
  17. code_fragments.append("")
  18. code = "\n".join(code_fragments)
  19. return code.encode('ascii', 'replace')
  20. def compile_service(port):
  21. start = time.time()
  22. temp_file = ".tmp_%s" % port
  23. def compile_AL(code):
  24. code = clean_code(code)
  25. if code == "":
  26. return [0]
  27. with open(temp_file, "w") as f:
  28. f.write(code.decode())
  29. f.flush()
  30. compiled = do_compile(temp_file, COMPILER_PATH + "/grammars/actionlanguage.g", "CS")
  31. os.remove(temp_file)
  32. return compiled
  33. def compile_model(code):
  34. code = clean_code(code)
  35. if code == "":
  36. return [0]
  37. with open(temp_file, "w") as f:
  38. f.write(code.decode())
  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, compiled)
  50. elif mode == "model":
  51. compiled = compile_model(code)
  52. service_set(port, "OK")
  53. service_set(port, 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("Compilation time: " + str(time.time() - start))
  60. try:
  61. init(sys.argv[1])
  62. login("HUTN", "HUTN")
  63. service_register("compiler", compile_service)
  64. try:
  65. if sys.version_info[0] < 3:
  66. while raw_input() != "STOP":
  67. pass
  68. else:
  69. while input() != "STOP":
  70. pass
  71. except EOFError:
  72. import time
  73. while 1:
  74. time.sleep(1.0)
  75. finally:
  76. service_stop()
  77. except KeyboardInterrupt:
  78. pass