问题标签 [mps]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mps - 我更新变量的类型(例如 Foo a; -> Bar b) MPS 如何更新 x.field 对新类型的引用?
TL;DR:我知道 MPS 2017.2 不会更新字段引用。问题是如何正确处理,以便 DSL 用户不必重新键入所有程序,以防发生单个“变量类型更改”
这是 MPS 的基本语言的示例:
如果我Foo
用Bar
in更新Foo a;
,那么测试代码看起来是一样的
如果我将变量的类型更新a
为Bar
,则test
方法中的代码仍将引用Foo
. 当然,check model
识别损坏的参考,但是我想知道在 MPS 中解决这类 DSL 问题的预期方法是什么?
“更新”脚本是否应该找到所有“字段用法”并相应地更新模型?是否应该禁止“字段类型更新”并要求用户确认?(例如某种重构或任何意图)
我正在 MPS 中构建 61131 ST 语言,所以我正在研究“静态类型语言”类型的 DSL。
mps - 如何在模板开关的默认分支中抛出错误(在生成时)?
我想确保只使用它可以处理的节点调用我的模板开关。如果它与无法识别的概念一起使用,我希望代码生成失败并出现错误。有没有办法从模板中抛出生成时错误?
注意:我一直在使用的解决方法是生成无效输出,这将导致错误,例如:
然后会产生一个错误
何时Fill
是交换机无法识别的概念。
mps - 如何调用为抽象概念的具体实例配置的任何生成器规则?
我有一组概念节点,我正在使用宏Command
进行迭代。是一个抽象的概念。我已经为具体的子概念定义了模板和缩减规则,例如:$LOOP$
Command
Outline
和
问题:我如何从只知道节点是抽象类型的宏内部为具体概念调用适当的生成器规则?$LOOP$
Command
[编辑] 由于建议的答案是特定于循环元素集合,当没有循环时我将如何做同样的事情?即如何为给定节点(例如当前节点的某个子节点)触发配置的规则。
注意 1:我尝试使用 just $LOOP$[null]
,希望元素节点能够通过适当的规则自动处理,但这只是null
在输出中产生了 s 。
注2:我试过$LOOP[$COPY_SRC$[null]]
了,但产生了
[编辑 2]这实际上是一个可行的解决方案。有什么帮助可能是使缓存无效(只是重建项目不起作用)。
注3:以前我使用模板开关来调用基于具体概念的适当模板,但我现在想支持自定义扩展,Command
所以我不能再创建一个详尽的模板开关。
python - 我可以在 Web 应用程序中使用 JetBrains MPS 吗?
我正在使用 Flask 开发一个小型 Web 应用程序。这个应用程序需要一个 DSL,它可以表达 .pdf 文件的内容。
我已经使用 JetBrains MPS 开发了一个 DSL,但现在我不确定如何在我的 Web 应用程序中使用它。可能吗?或者我应该考虑切换到另一个 DSL 或直接在 Python 中制作我的 DSL。
mps - 有没有办法通过 Gradle 使用 mps 扩展?
我看到https://github.com/JetBrains/MPS-extensions通过 GitHub 发布版本,但是将工件集成到基于 MPS 的项目中看起来并不方便。
如果我的项目是通过 MPS 构建的并且依赖于 MPS 扩展,该怎么办?如果有一种方法可以通过命令行自动下载适当的扩展工件(例如./gradlew downloadExtensions
) ,那就太好了
mps - 如何在 Jetbrains MPS 中的节点上运行撤消操作?
我正在创建一个插件,它将有两个按钮来在特定节点上执行撤消和重做操作。我想知道是否可以有问题地执行 IDE 撤消和重做操作?