(WIP) add CBD language

This commit is contained in:
Joeri Exelmans 2024-11-05 13:54:42 +01:00
parent a89fe4bb71
commit 641e4b9810
6 changed files with 289 additions and 0 deletions

55
examples/cbd/models.py Normal file
View file

@ -0,0 +1,55 @@
import os
from framework.conformance import Conformance, render_conformance_check_result
from concrete_syntax.textual_od import parser
# get file contents as string
def read_file(filename):
dir = os.path.dirname(__file__)
with open(dir+'/'+filename) as file:
return file.read()
# def parse_and_check(state, cs_file, mm):
# m_cs = read_file(cs_file)
# try:
# _parse_and_check(state, m_cs, mm)
# except Exception as e:
# e.add_note(f"While parsing '{cs_file}'")
# raise
# return m
def parse_and_check(state, m_cs, mm, descr: str):
try:
m = parser.parse_od(
state,
m_text=m_cs,
mm=mm,
)
conf = Conformance(state, m, mm)
errors = conf.check_nominal()
if len(errors) > 0:
raise Exception(render_conformance_check_result(errors))
except Exception as e:
e.add_note("While parsing model " + descr)
raise
return m
def get_metamodels(state, scd_mmm):
mm_cs = read_file('models/mm_design.od')
mm_rt_cs = mm_cs + read_file('models/mm_runtime.od')
mm = parse_and_check(state, mm_cs, scd_mmm, "Design meta-model")
mm_rt = parse_and_check(state, mm_rt_cs, scd_mmm, "Runtime meta-model")
return (mm, mm_rt)
def get_fibonacci(state, scd_mmm):
mm, mm_rt = get_metamodels(state, scd_mmm)
m_cs = read_file('models/m_fibonacci.od')
m_rt_initial_cs = m_cs + read_file('models/m_fibonacci_initial.od')
m = parse_and_check(state, m_cs, mm, "Fibonacci model")
m_rt_initial = parse_and_check(state, m_rt_initial_cs, mm_rt, "Fibonacci initial state")
return (mm, mm_rt, m, m_rt_initial)