MPS 如何工作?

方言和领域专用术语可以帮助人们进行专门和有效的沟通。 MPS 为编程语言世界带来同样的灵活性。 与语法和语义严格的传统编程语言不同,MPS 允许用户创建、更改或扩展语言。

扩展语言的核心问题主要在于解析器。 解析器将代码持久表示与可视符号联系起来,但它们不能轻易地与其他解析器组合,这妨碍了语言模块化。

这就自然催生了以非文本表示程序代码的想法。 这种方法的一个主要优点在于无需解析。 我们的解决方案是一直在抽象语法树 (AST) 中维护代码,语法树由具有属性、子项和引用的节点组成,并且完整地描述了程序代码。

然后,MPS 编辑器的任务是以用户友好的方式可视化 AST,并提供有效编辑的方法。 对于经典文本语言,编辑器应为用户提供以类似文本的方式编辑文本的错觉;而对于图形表示法,编辑器应采用表现良好的图表编辑器的习惯。

创建语言时,您定义代码编辑和呈现的规则。 您还可以指定语言类型-系统和约束。 这允许 MPS 动态检查程序代码,因此使用新语言进行编程变得容易且不易出错。

MPS 使用生成式方法。 您可以为语言定义生成器,从而将用户代码转换成使用更传统、更通用语言编写的可编译代码。 目前,MPS 特别擅长但不限于生成 Java 代码。 您还可以生成 C、XML、FHTML、PDF、LaTeX、JavaScript 等。

观看视频 教程

什么是领域专用语言 (DSL)?

“编程语言通过指定直接使用来自特定问题领域的概念和规则的解决方案,将抽象级别提升到编程之外。”

Kelly 和 Tolvanen (2008)

使用 MPS,您可以为新语言定义自定义编辑器,并让使用这些 DSL 更简单。 即使是不熟悉传统编程的领域专家也可以在 MPS 中轻松工作,因为领域专用语言使用其领域专用术语设计。

投影编辑器

投影编辑器允许用户以有效的方式编辑代码的抽象语法树 (AST) 表示。 它可以模仿用于文本表示法的文本编辑器、用于图形化语言的图表编辑器,以及用于编辑表格的表格式编辑器等编辑器的行为。 用户通过直观的屏幕视觉与代码交互,甚至可以在多台显示器之间切换相同代码。

观看视频 教程

IDE 支持

JetBrains 以其高性能 IDE 和开发工具而闻名,MPS 也不例外。

MPS 是一款功能强大的 IDE,提供充分利用 DSL 所需的一切。 其中的一些功能包括:代码补全、导航、重构、错误检查、快速修复、DSL 调试、带自动迁移的语言版本控制,以及与主流版本控制系统集成。

观看视频 教程

代码生成

由 MPS 生成器弥合业务领域和实现领域之间的语义鸿沟。

通过一系列步骤,生成器逐渐将初始领域专用模型转换为以低级通用语言(例如,Java、C、JavaScript 或 XML)表示的模型。 然后可以将得到的模型进一步转换为文本源文件,这些文件可被送到传统编译器中,以便生成可运行的二进制文件。

领域专用语言使领域专家的业务知识正式化,生成器以给定技术封装该知识的实现。 生成器以可重用的形式保留了最高级软件开发者的专业知识,并让他人从中受益。

语言中明确分离的商业知识和生成器中的实现知识,允许用户通过为同一语言使用多个生成器同时面向多个平台。 用户还可以在切换目标实现技术时节省工作量,因为只需更改生成器。 现有领域专用模型中包含的业务知识可以保持完整。

使用 MPS 创建 DSL 和语言扩展

MPS 最初引入了一种名为 BaseLanguage 的即用型通用语言,这种语言是 Java 的副本。 随着时间推移,还添加了其他语言,如 XML、C 和 JavaScript。 这些语言本身就可用于创建程序。 但 MPS 的真正优势在于扩展 BaseLanguage 或其他通用语言,并以它们为基础创建新语言。 MPS 附带一些有用的 BaseLanguage 扩展,用于处理字符串、集合、日期、正则表达式等。 您还可以将它们用作创建新语言的参考。 这些强大的工具使 MPS 成为非常善于创建领域专用语言 (DSL) 的工具。