A fully working version of the scheduling language with added examples
This commit is contained in:
parent
ec42f74960
commit
ebfd85a666
126 changed files with 7235 additions and 981 deletions
46
transformation/schedule/rule_executor.py
Normal file
46
transformation/schedule/rule_executor.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
from typing import Any
|
||||
from uuid import UUID
|
||||
|
||||
from api.od import ODAPI
|
||||
from transformation.matcher import match_od
|
||||
from transformation.rewriter import rewrite
|
||||
from util.loader import parse_and_check
|
||||
|
||||
|
||||
class RuleExecutor:
|
||||
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, od: ODAPI, rhs: UUID, *, pivot: dict[Any, Any]):
|
||||
rhs = rewrite(
|
||||
self.state,
|
||||
rhs_m=rhs,
|
||||
pattern_mm=self.mm_ramified,
|
||||
lhs_match=pivot,
|
||||
host_m=od.m,
|
||||
host_mm=od.mm,
|
||||
eval_context=self.eval_context,
|
||||
)
|
||||
od.recompute_mappings()
|
||||
yield rhs
|
||||
|
||||
def load_match(self, file: str):
|
||||
with open(file, "r") as f:
|
||||
return parse_and_check(self.state, f.read(), self.mm_ramified, file)
|
||||
Loading…
Add table
Add a link
Reference in a new issue