opsem_rulebased.py 880 B

1234567891011121314151617181920212223242526
  1. ### Operational Semantics - defined by rule-based model transformation ###
  2. from transformation.rule import Rule, RuleMatcherRewriter, PriorityActionGenerator
  3. from transformation.ramify import ramify
  4. from util import loader
  5. import os
  6. THIS_DIR = os.path.dirname(__file__)
  7. get_filename = lambda rule_name, kind: f"{THIS_DIR}/rules/r_{rule_name}_{kind}.od"
  8. def get_action_generator(state, rt_mm):
  9. rt_mm_ramified = ramify(state, rt_mm)
  10. matcher_rewriter = RuleMatcherRewriter(state, rt_mm, rt_mm_ramified)
  11. rules0_dict = loader.load_rules(state, get_filename, rt_mm_ramified, ["hungry_bear_dies"])
  12. rules1_dict = loader.load_rules(state, get_filename, rt_mm_ramified, ["advance_time", "attack"])
  13. generator = PriorityActionGenerator(matcher_rewriter, [
  14. rules0_dict, # highest priority
  15. rules1_dict, # lowest priority
  16. ])
  17. return generator