使用 MPS 从一个 DSL 生成不同的文本语言

Generate Different Text Languages from one DSL with MPS

我正在寻找一种以多种不同语言生成代码的方法,好的开始是 ObjC、Java for Android、Unity 和 JavaScript (Cordova),对于重复的代码。目前我正在用每种语言一遍又一遍地手动编写代码。我正在研究 MPS 并考虑开发一个 DSL 并从中为每种语言生成不同的代码。

我的问题是 MPS 是否允许为不同的语言创建不同的 TextGen?

是的,MPS 允许您定位不同的语言。当然,您需要区分 MPS 中生成过程的两个逻辑 "phases" - 执行模型转换的生成器和将模型转换为文本的 textgen。生成器通常将 DSL 转换为通用语言(仍然表示为 AST),而为该通用语言定义的 textgen 将代码转换为文本。目前存在几种这样的通用 "base" 语言 - Java、C、XML 和一些原型。

通过为 DSL 定义的 textgen 将 DSL 直接转换为文本也是可能的,但仅适用于简单的 DSL。