演进中的SDL标准自动化工具
1. SDL元模型的生成
基于SDL的180条语法规则(其中包括93条定义规则和87条等价规则),我们生成了102个元类。元类数量比语法规则数量少,是因为一些等价规则仅代表别名定义,这些定义会被自动移除。由于MMSDL中不仅包含生成的元类,还包含MMAC的元类,所以我们的SDL元模型总共包含145个元类。
2. 迈向最终元模型的步骤
虽然我们的方法可以自动推导SDL元模型的许多方面,但“约束”注释除外。这种注释类型只能用纯文本指定,并复制到相应的“约束”元素中。因此,“约束”的OCL规范必须手动实现。在SDL中,静态语义是用一阶谓词逻辑定义的,可以手动将其转换为OCL。我们采用类似的方法为SDL元模型实现OCL“约束”。不过,由于使用了“抽象概念”的继承辅助操作和属性,OCL规范可以得到简化。
例如,考虑Constraint_1,它被转换为OCL如下:
self.specification <> null implies
self.allOwnedElements()->select(oclIsKindOf(StateNode))->isEmpty()
在OCL约束的第一行,我们确定一个过程定义是否定义了SDL操作的行为。我们可以使用继承的 specification
属性来实现这一目的,而不是使用复杂的OCL表达式。此外,我们使用继承的 allOwnedElements()
操作来检索过程定义拥有的所有元素,然后只需检查这些成员是否不包含任何 StateNo