1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from concrete_syntax.textual_od.renderer import render_od
- import pprint
- from typing import Generator, Callable, Any
- from uuid import UUID
- import functools
- from api.od import ODAPI
- from concrete_syntax.common import indent
- from transformation.matcher import match_od
- from transformation.rewriter import rewrite
- from transformation.cloner import clone_od
- from util.timer import Timer
- from util.loader import parse_and_check
- class RuleExecuter:
- def __init__(self, state, mm: UUID, mm_ramified: UUID, eval_context={}):
- self.state = state
- self.mm = mm
- self.mm_ramified = mm_ramified
- self.eval_context = eval_context
- # Generates matches.
- # Every match is a dictionary with entries LHS_element_name -> model_element_name
- def match_rule(self, m: UUID, lhs: UUID, *, pivot:dict[Any, Any]):
- lhs_matcher = match_od(self.state,
- host_m=m,
- host_mm=self.mm,
- pattern_m=lhs,
- pattern_mm=self.mm_ramified,
- eval_context=self.eval_context,
- pivot= pivot,
- )
- return lhs_matcher
- def rewrite_rule(self, m: UUID, rhs: UUID, *, pivot:dict[Any, Any]):
- yield rewrite(self.state,
- rhs_m=rhs,
- pattern_mm=self.mm_ramified,
- lhs_match=pivot,
- host_m=m,
- host_mm=self.mm,
- eval_context=self.eval_context,
- )
- def load_match(self, file: str):
- with open(file, "r") as f:
- return parse_and_check(self.state, f.read(), self.mm_ramified, file)
|