我是 MPS 的新手,所以这可能是一个愚蠢的问题,但我在任何地方都找不到解决方案。
我正在定义两个 DSL,其中第一个将依赖于第二个。
我已经定义了第一语言的一部分,到目前为止一切都很好。
我有一堆概念,一些编辑器,约束等。
我创建了一个带有示例节点的模型,我可以在其中查看我所做的事情。
现在我正在研究第二种语言,我的方法与第一种语言完全相同。
我创建了一个可以作为根的概念。它被称为“模块”。
然后我定义了一个名为“IModuleContent”的接口概念,并将其作为一个孩子交给“Module”,称其为“内容”并将基数设置为[0..n]。
然后我定义了另一个概念,称为“接口”,它继承自“IModuleContent”。我给了两个概念编辑器,它们现在基本上只是大括号。
在我的示例模型中,我使用新语言创建了一个新节点。它给了我我的根,一个“模块”。因为它是一个命名的概念,所以我给它一个名字。然后,在模块的大括号内,我声明了一个新的“接口”。
一起,
Module printeri {
Interface printer {
}
}
这一切都非常有效,除了在给“模块”一个“接口”(所以“打印机”)的实例作为变量之后,它会用红色下划线并且错误显示为:
"Child in the role Module.content does not belong to the concept Module"
但是,我很确定确实如此。所有的概念都在新语言的结构中,我相信一切都以正确的方式继承。我用我的母语做了几乎同样的事情,而且效果很好。
这里发生了什么?
编辑:应该指定我使用的是 2020.3 版