10

我想将一个非常简单的 Antlr 语法转换为 Xtext,所以没有语法谓词,也没有Xtext 不提供的 Antlr 的花哨功能。考虑这个语法

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 约定。

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

4

1 回答 1

4

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

于 2011-11-28T06:22:24.300 回答