main.py 2.1 KB

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