0

我是 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 版

4

2 回答 2

1

如果您认为 MPS 的行为很奇怪,您可以转到“文件 -> 使缓存无效并重新启动”。对我来说,您似乎做了一些更改,例如在示例中创建“模块”节点,然后更改结构,例如删除“内容”-child 并重新添加它。这里的问题是 MPS 不能解析基于 id 而不是基于名称。通过删除并重新添加成员定义,您可以更改 id。MPS 能够在一定程度上处理此类更改,例如只需按“F5”即可刷新编辑器。您还可以单击节点并通过“ALT+ENTER”打开意图菜单,调查那里建议的选项。

希望这些背景知识对您未来的问题有所帮助:)

最好的问候海科

这里的评论功能似乎有一个错误,嗨删除了“嗨诺亚”

于 2021-02-11T19:20:59.300 回答
0

好的,看来错误在一夜之间神奇地消失了。

昨天我关闭了当天的 MPS,今天早上又打开了它。
代码完成不起作用。很烦人。所以我重新启动了 MPS。

在第二次尝试代码完成时,之前的错误消失了。
看起来 MPS 可能有点不稳定。

所以,是的,对于遇到同样问题的任何人:
尝试古老的“关闭并再次打开”方法。

于 2021-02-04T09:00:25.393 回答