我打算在Xtext之上实现一种元语言。换句话说,我正在使用Xtext语法定义自己的元语言。然后可以使用这种元语言来定义一种语言(使用我定义的语法)。使用定义的语言,用户可以创建模型。
因此,我想将Xtext / Xtend用作解析器生成器的生成器。这将使我能够添加任意数量的元级别。我的理解是,Xtext本身是使用Xtext定义的,所以应该可行吗?
问题是我不知道该如何处理,因为我通常不是Xtext或解析器生成器框架的专家。欢迎任何解决方案/方法/提示。
更新(更多详细信息和动机)
Xtext可以用来生成任何东西,因此我可以编写基于Xtext的生成器来生成解析器。这可以通过指定我的元语言的语法,使用Xtext生成该语法的解析器来完成,因此我将可以访问表示以我的元语言编写的模型的AST。但是,从现在开始,我将被独自做任何我想做的事情,例如AST。生成解析器(因为AST表示用户定义语言的语法)。但是由于Xtext具有生成解析器的特定功能,所以我在考虑重用此功能,而不是基于语法的AST实现自己的解析器生成器。
我的动力是希望定义自己的DSL语法语言(以替代Xtext),同时仍然能够使用Xtext项目提供的基础结构。
答案 0 :(得分:0)
我得出以下解决方案: Xtext将解析使用我的语法语言编写的语法。接下来,将生成的AST转换为Xtext语法语言AST,可以将其用作现有解析器生成器的输入。
通常,给定某种语法语言l1,将解析用该语言编写的模型,并将得到的AST转换为用于指定l1的语法语言l2的AST。重复此步骤,直到我们拥有一个表示Xtext语法语言模型的AST,该模型将用于生成新的解析器。
自然地,添加有新语法语言定义的任何信息都将在每个转换步骤中丢失。因此,围绕语法语言开发的基础结构有责任创建某种功能,以使该信息可用于使用语法语言开发的高级语言。
答案 1 :(得分:0)
有关其他方法,请参见:
WWW.XTRAN-LLC.com/xtran.html#parse-gen
简而言之,我已经厌倦了为XTRAN创建解析器,XTRAN是我们的专家系统,其规则语言可操纵计算机语言,数据和文本,因此我创建了一个解析引擎,该引擎在解析时直接执行EBNF(与创建解析相反)代码,例如Lexx / YACC和ANTLR)。由于XTRAN还必须将其内部表示/ AST(在被操纵后)中表示的代码内容作为源代码文本进行呈现,因此我创建了一个相应的呈现引擎,该引擎在呈现时执行EBNF(一种更简单的形式)。