【发布时间】:2019-01-21 11:48:35
【问题描述】:
我计划在 Xtext 之上实现一种元语言。换句话说,我正在使用 Xtext 语法来定义我自己的元语言。然后可以使用这种元语言来定义一种语言(使用我定义的语法)。使用定义的语言,用户可以创建模型。
因此,我想使用 Xtext/Xtend 作为解析器生成器的生成器。这将使我能够添加任意数量的元级别。我的理解是,Xtext 本身是使用 Xtext 定义的,所以这应该是可能的?
问题是我不知道如何解决这个问题,因为我不是 Xtext 或解析器生成器框架方面的专家。欢迎任何解决方案/方法/提示。
更新(更多细节和动机)
Xtext 可以用来生成任何东西,所以我可以编写一个基于 Xtext 的生成器来生成解析器。这可以通过指定我的元语言的语法来完成,使用 Xtext 为该语法生成解析器,这样我就可以访问代表用我的元语言编写的模型的 AST。但是,从现在开始,我将独自一人对 AST 做任何我想做的事情,例如生成解析器(因为 AST 代表用户定义语言的语法)。但是由于 Xtext 具有生成解析器的特定能力,我正在考虑重用这个功能,而不是实现我自己的基于语法的 AST 的解析器生成器。
我的动机是希望定义自己的 DSL 语法语言(作为 Xtext 的替代品),同时仍然能够使用 Xtext 项目提供的基础设施。
【问题讨论】:
-
不确定我是否可以关注你。在 Xtext 中,您可以编写生成器。你可以在那里做任何你想做的事。如果生成的代码本身是解析器。然后你有一个解析器生成器。我的问题是:这种方法有什么好处?
-
请查看我的更新,希望我能更清楚地描述我的问题和动机。如果还有什么具体的不清楚,我会补充。
-
您的语法与 Xtext 语法语言有何不同
-
我想添加一些便利功能,例如简化符号表生成(这是我在所有 DSL 中都需要的功能之一,因此在此级别包含此功能会很整洁)
-
我不确定,但不会扩展 Xtext 或只是为工作流编写一些片段来做同样的事情