0

据我所知,DSL 编辑器使用两种方法:

1-开发文本 DSL 的基于解析器的方法:用户指定语法,工作台生成识别该语法的解析器。解析器构建一个抽象语法树,供代码生成器等使用。

2-投影方法:这里没有解析器。抽象语法树由用户的手势直接编辑,投影规则指定抽象语法树的呈现方式。这允许同时使用不同的符号(文本、图形、表格...)

现在,当我查看仅图形化的 DSL 工作台(例如 Microsoft 的 DSL 工具)时,我想知道它们使用什么方法以及定义 DSL 背后涉及的步骤是什么。如果它是投影方法,那么为什么它仅限于图形符号?

我的想法是它同时使用两者。使符号图形化的投影方法,但模型以特定格式(例如 XML)保存并解析。

谢谢你。

4

2 回答 2

1

源编辑环境和投影编辑环境之间的一个重要区别是持久存储和编辑之间的分离。投影编辑系统可以选择他们选择的任何持久性机制,而源系统需要有一些通用的存储机制——这就是为什么它们几乎总是文本文件Martin Fowler

因此,如果您正在编辑的内容与存储的格式不同,则您使用的是投影编辑器。所有非文本符号(表格、符号、图形)本质上不能完全按照它们的外观存储,因此必须投影。

示例:本网站上的 Markdown

一个使用投影编辑器的常用工具(您不会这样想)的示例可能是 MS Word,因为您不能只在记事本中快速打开 .docx 文件并更改标题的大小. 您总是编辑通过投影显示给您的抽象表示。

WYSIWYG 文字处理系统,如 Word,似乎直接编辑格式化文本,本质上是底层标记文本的结构编辑器。[维基百科]


一个相关的术语是说明性编程[ Fowler ],它具有世界 Excel 中所谓的最常见的“编程语言”。

于 2020-08-13T20:20:01.587 回答
1

好吧,严格来说,任何“图形”编辑器都是投影的。语言工作台具有不同符号的能力,例如在 MPS 中,是因为该工具具有内置的这些符号,以及为同一模型定义多个编辑器的能力。在 MPS 的情况下,甚至可以创建新的符号作为插件(因此不必更改 MPS 本身)。

我会说将模型保存到任何存储介质最终只能是文本或二进制文件。任何想要保存模型的编辑器都将序列化为这两个选项之一,甚至是 MPS。因此,既然说有一种投影方式来保存模型是没有意义的,那么您可以说 DSL 工具和 MPS 都具有用于保存的文本方法和一个投影编辑器,或者(我的首选选项)简单地说DSL 工具和 MPS 都可以生成投影编辑器。

另外,我不同意将 DSL 工具称为语言工作台。正如您在https://homepages.cwi.nl/~storm/publications/lwc13paper.pdf中所读到的那样,程序必须满足一系列标准(在我看来超过 DSL 工具可以满足的标准)才能成为语言工作台。

一般来说,我会说任何“图形”语言工作台(即生成非纯文本编辑器的语言工作台)都使用投影方法。

于 2019-10-29T17:37:37.510 回答