【问题标题】:Convert simple Antlr grammar to Xtext将简单的 Antlr 语法转换为 Xtext
【发布时间】:2012-01-06 23:08:57
【问题描述】:

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

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

【问题讨论】:

  • 不知道有什么工具可以完全满足您的需求,但您可以convert 将语法转换为 XML,然后在结果上运行一些 XQuery 或 XSLT 以转换为所需的目标格式。转换器仅了解 ANTLR 语法的基本结构,但这正是您所要求的。
  • @BartKiers 和 Gunther,我很感谢你们俩的帮助,但这次谈话似乎跑题了。 Gunther,你的转换器可能有一个问题跟踪器(我也很高兴地使用它),所以它可以在那里继续。
  • @AdamSchmideg,你说得对,它并不完全符合主题,但它开始时有一条评论 符合主题:老实说,我觉得你有点固执己见。但很公平,这是你的问题,所以我会消除我的噪音。我很抱歉。 @Gunther,我试图在这个问答中解释~ 字符的使用:stackoverflow.com/questions/8284919/…
  • @BartKiers,+1 感谢您的理解,好吧,我可能应该得到一个坚持者徽​​章 :)
  • @AdamSchmideg 你有没有找到任何工具来实现同样的目标。

标签: antlr xtext


【解决方案1】:

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

【讨论】:

  • 手动解决问题可能意味着大量工作,因为 Xtext 迫使我考虑 AST,而 Antlr 对草率的“只解析而不关心 AST”方法感到满意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2016-02-09
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多