rulebased_runner.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import urllib.parse
  2. from state.devstate import DevState
  3. from bootstrap.scd import bootstrap_scd
  4. from framework.conformance import Conformance, render_conformance_check_result
  5. from concrete_syntax.textual_od import parser
  6. from concrete_syntax.plantuml.renderer import render_object_diagram, render_class_diagram
  7. from api.od import ODAPI
  8. from transformation.ramify import ramify
  9. from examples.semantics.operational.simulator import Simulator, RandomDecisionMaker, InteractiveDecisionMaker
  10. from examples.semantics.operational.port import models
  11. from examples.semantics.operational.port.helpers import design_to_state, state_to_design, get_time
  12. from examples.semantics.operational.port.renderer import render_port_textual, render_port_graphviz
  13. from examples.semantics.operational.port import rulebased_sem
  14. state = DevState()
  15. scd_mmm = bootstrap_scd(state) # Load meta-meta-model
  16. ### Load (meta-)models ###
  17. def parse_and_check(m_cs: str, mm, descr: str):
  18. m = parser.parse_od(
  19. state,
  20. m_text=m_cs,
  21. mm=mm)
  22. conf = Conformance(state, m, mm)
  23. print(descr, "...", render_conformance_check_result(conf.check_nominal()))
  24. return m
  25. port_mm = parse_and_check(models.port_mm_cs, scd_mmm, "MM")
  26. port_m = parse_and_check(models.port_m_cs, port_mm, "M")
  27. port_rt_mm = parse_and_check(models.port_rt_mm_cs, scd_mmm, "RT-MM")
  28. port_rt_m = parse_and_check(models.port_rt_m_cs, port_rt_mm, "RT-M")
  29. print()
  30. # print(render_class_diagram(state, port_rt_mm))
  31. ### Simulate ###
  32. port_rt_mm_ramified = ramify(state, port_rt_mm)
  33. rulebased_action_generator = rulebased_sem.get_action_generator(state, port_rt_mm, port_rt_mm_ramified)
  34. termination_condition = rulebased_sem.TerminationCondition(state, port_rt_mm_ramified)
  35. sim = Simulator(
  36. action_generator=rulebased_action_generator,
  37. # decision_maker=RandomDecisionMaker(seed=2),
  38. decision_maker=InteractiveDecisionMaker(),
  39. termination_condition=termination_condition,
  40. check_conformance=True,
  41. verbose=True,
  42. renderer=render_port_textual,
  43. # renderer=render_port_graphviz,
  44. )
  45. od = ODAPI(state, port_rt_m, port_rt_mm)
  46. sim.run(od)