【发布时间】: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 你有没有找到任何工具来实现同样的目标。