49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
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)
|