如何使用Xtext生成解析器生成器



我计划在Xtext之上实现一种元语言。换句话说,我正在使用Xtext语法来定义我自己的元语言。这个元语言可以用来定义一种语言(使用我定义的语法)。使用定义的语言,用户可以创建模型。

因此,我想使用Xtext/Xtend作为解析器生成器的生成器。这将使我能够添加任意数量的元级别。我的理解是,Xtext本身是使用Xtext定义的,所以这应该是可能的吗?

问题是,我不知道如何处理这个问题,因为我不是Xtext或解析器生成器框架的专家。欢迎任何解决方案/方法/提示。

更新(更多详细信息和动机)

Xtext可以用来生成任何东西,所以我可以编写一个基于Xtext的生成器来生成解析器。这可以通过指定我的元语言的语法来完成,使用Xtext为该语法生成语法分析器,这样我就可以访问一个AST,它代表用我的元语编写的模型。然而,从现在起,我将独自对AST做任何我想做的事情,例如生成一个解析器(因为AST代表用户定义语言的语法)。但是,由于Xtext具有生成解析器的特定能力,我考虑重用此功能,而不是基于语法的AST实现我自己的解析器生成器。

我的动机是希望定义我自己的DSL语法语言(作为Xtext的替代品),同时仍然能够使用Xtext项目提供的基础设施。

我得到了以下解决方案:使用我的语法语言编写的语法将由Xtext解析。接下来,将生成的AST转换为Xtext语法语言AST,该语言可以用作现有解析器生成器的输入。

通常,给定某些语法语言l1,将解析用该语言编写的模型,并将生成的AST转换为用于指定l1的语法语言l2的AST。重复这个步骤,直到我们有一个表示Xtext语法语言模型的AST,它将用于生成新的解析器。

自然,在每一个转换步骤中,任何添加了新语法语言定义的信息都会丢失。因此,围绕语法语言开发的基础设施有责任创建某种功能,使这些信息可用于使用语法语言开发出的高级语言。

有关不同的方法,请参阅:

WWW.XTRAN-LLC.com/XTRAN.html#解析第二代

简言之,我厌倦了为XTRAN创建解析器,XTRAN是我们的专家系统,其规则语言操纵计算机语言、数据和文本,所以我创建了一个解析引擎,在解析时直接执行EBNF(而不是创建解析代码,例如Lex/YACC和ANTLR)。由于XTRAN还必须将其内部表示/AST中表示的代码内容(在对其进行操作后)呈现为源代码文本,因此我创建了一个相应的呈现引擎,该引擎在呈现时执行EBNF(一种更简单的形式)。

最新更新