MPS如何工作?

方言和特定领域的术语可以帮助人们进行特定而有效的交流。MPS将相同的灵活性带入了编程语言领域。与具有严格语法和语义的传统编程语言不同,MPS允许用户创建,更改或扩展一种语言。

扩展语言的核心问题主要在于解析器。解析器将代码的持久性表示形式与可视化表示符绑定在一起,并且它们无法轻松地与其他解析器结合使用,从而阻止了语言模块化。

这自然导致了程序代码的非文本表示的想法。这种方法的主要优点是消除了解析的需要。我们的解决方案是始终将代码维护在抽象语法树 (AST)中,该由具有属性,子代和引用的节点组成,并充分描述了程序代码。

MPS编辑器的任务是以一种用户友好的方式可视化AST,并提供有效的编辑方式。对于古典文本语言,编辑器应向用户提供以类似文本的方式编辑文本的幻觉,对于图形表示法,另一方面,编辑器应养成行为良好的图表编辑器的习惯。

创建语言时,可以定义代码编辑和渲染的规则。您还可以指定语言类型系统和约束。这使MPS可以即时检查程序代码,从而使使用新语言进行编程变得容易且不易出错。

MPS使用生成方法。您可以为一种语言定义生成器,以将用户代码转换为以更常规的,通常是通用的语言编写的可编译代码。当前,MPS特别擅长但不限于生成Java代码。您还可以生成C,XML,FHTML,PDF,LaTeX,JavaScript等。

观看视频教程

什么是领域特定语言(DSL)?

“通过指定直接使用特定问题域中的概念和规则的解决方案,可以使编程之外的抽象水平提高的编程语言。”

凯利和托尔瓦嫩(2008)

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

投影编辑器

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

观看视频教程

IDE支持

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

MPS是一个功能强大的IDE,您可以充分利用DSL的全部功能。其中包括的一些功能包括:代码完成,导航,重构,错误检查,快速修复,DSL调试,具有自动迁移功能的语言版本控制以及与主流版本控制系统的集成。

观看视频教程

代码生成

跨业务域和实现域之间的语义鸿沟由MPS生成器处理。

通过一系列步骤,生成器逐渐将原始的特定于域的模型转换为以低级通用语言(例如Java,C,JavaScript或XML)表示的模型。然后可以将生成的模型进一步转换为文本源文件,可以将其输入传统编译器中以生成可运行的二进制文件。

当特定领域的语言将领域专家的业务知识形式化时,生成器将这些知识的实现封装在给定的技术中。生成器以可重用的形式保留了最高级软件开发人员的专业知识,并让其他人从中受益。

语言中包含的业务知识和生成器中包含的实现知识的明确区分,使用户可以通过使用同一语言的多个生成器来同时定位多个平台。由于仅需要更改生成器,因此用户在切换目标实现技术时也可以省力。现有领域特定模型中包含的业务知识可以保持不变。

用于创建DSL和语言扩展的MPS

MPS最初包括一种现成的通用语言,称为BaseLanguage,它是Java的副本。随着时间的推移,已经添加了其他语言,例如XML,C和JavaScript。这些本身可以用来创建程序。但是,MPS的真正优势在于可以用于扩展BaseLanguage或其他通用语言并在它们之上创建新语言。MPS附带了一些有用的BaseLanguage扩展,用于处理字符串,集合,日期,正则表达式等。您还可以将它们用作创建新语言的参考。这些强大的工具使MPS非常熟练地用作创建领域特定语言(DSL)的工具。

内置MPS

Aveco — DSL,用于描述我们的实时系统的分布式体系结构并生成实现服务器,客户端和传输层的C ++代码

可扩展的C语言和IDE ,支持形式验证,要求和PLE

modellwerkstatt-开发业务应用程序变得容易

Meta R IDE-混合用户界面和脚本以帮助生物学家分析数据

PEoPL —一种IDE,用于对软件产品线进行灵活的基于视图的工程设计