Add 'simplified' version of the FTG+PM++ formalism with operational semantics
This commit is contained in:
parent
ced3edbd08
commit
d00b9c25db
16 changed files with 1135 additions and 0 deletions
47
examples/ftg_pm_pt/ftg_pm_pt.py
Normal file
47
examples/ftg_pm_pt/ftg_pm_pt.py
Normal 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)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue