Add 'simplified' version of the FTG+PM++ formalism with operational semantics

This commit is contained in:
Inte Vleminckx 2025-06-03 16:17:37 +02:00
parent ced3edbd08
commit d00b9c25db
16 changed files with 1135 additions and 0 deletions

View file

@ -0,0 +1,47 @@
import os
# Todo: remove src.backend.muMLE from the imports
from state.devstate import DevState
from bootstrap.scd import bootstrap_scd
from concrete_syntax.textual_od.parser import parse_od
from api.od import ODAPI
from concrete_syntax.textual_od.renderer import render_od as od_renderer
from concrete_syntax.plantuml import make_url as plant_url, renderer as plant_renderer
from concrete_syntax.graphviz import make_url as graphviz_url, renderer as graphviz_renderer
class FtgPmPt:
def __init__(self, name: str):
self.state = DevState()
self.scd_mmm = bootstrap_scd(self.state)
self.meta_model = self.load_metamodel()
self.model = None
self.odapi = None
self.name = name
@staticmethod
def read_file(file_name):
with open(os.path.join(os.path.dirname(__file__), file_name)) as file:
return file.read()
def load_metamodel(self):
mm_cs = self.read_file("pm/metamodels/mm_design.od")
mm_rt_cs = mm_cs + self.read_file("pm/metamodels/mm_runtime.od")
mm_total = mm_rt_cs + self.read_file("pt/metamodels/mm_design.od")
return parse_od(self.state, m_text=mm_total, mm=self.scd_mmm)
def load_model(self, m_text: str | None = None):
m_text = "" if not m_text else m_text
self.model = parse_od(self.state, m_text=m_text, mm=self.meta_model)
self.odapi = ODAPI(self.state, self.model, self.meta_model)
def render_od(self):
return od_renderer(self.state, self.model, self.meta_model, hide_names=False)
def render_plantuml_object_diagram(self):
print(plant_url.make_url(plant_renderer.render_package(
self.name, plant_renderer.render_object_diagram(self.state, self.model, self.meta_model)))
)
def render_graphviz_object_diagram(self):
print(graphviz_url.make_url(graphviz_renderer.render_object_diagram(self.state, self.model, self.meta_model)))