我想将一个非常简单的Antlr语法转换为Xtext,所以没有syntactic predicates,没有fancy features of Antlr not provided by Xtext。考虑这个语法

grammar simple; // Antlr3

foo: number+;
number: NUMBER;
NUMBER: '0'..'9'+;

和它的Xtext对应物
grammar Simple; // Xtext
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate Simple "http://www.example.org/Simple"

Foo: dummy=Number+;
Number: NUMBER_TOKEN;
terminal NUMBER_TOKEN: '0'..'9'+;

Xtext在后台使用Antlr,但是两种格式并不完全相同。我必须修改很多烦人(且部分可以理解)的内容,包括:
  • 使用terminal关键字
  • 的前缀终端
  • 包括import "http://www.eclipse.org/emf/2002/Ecore" as ecore以使终端正常工作
  • 将功能添加到顶级规则,例如foo: dummy=number+
  • 请记住,即使不区分大小写,规则和终端名称也必须唯一。
  • (可选)将规则名称的首字母大写以遵循Java约定。

  • 是否有至少在简单情况下自动进行此转换的工具?如果不是,是否有更完整的 list ,列出所需的修改内容?

    最佳答案

    由于Antlr语法缺少Xtext语法所需的信息,因此基本上不可能自动进行此转换。 Xtext中的规则名称将用于从中创建类。 Xtext中有一些分配,这些分配将成为这些类中的 getter 和 setter 。但是,不应将这些分配用于每个规则调用,因为Xtext中有一些特殊的模式可以减少生成的AST中的噪声。像这样的东西使得几乎不可能自动进行此转换。但是,通常直接将Antlr语法复制到Xtext编辑器中并手动解决问题。

    关于antlr - 将简单的Antlr语法转换为Xtext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8279790/

    10-12 14:20