将简单的Antlr语法转换为Xtext

时间:2011-11-26 16:22:01

标签: antlr xtext

我想将一个非常简单的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约定。

是否有工具可以自动进行此转换,至少对于简单的情况?如果没有,是否有更完整的此类必要修改清单?

1 个答案:

答案 0 :(得分:3)

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