我想将一个非常简单的Antlr语法转换为Xtext,所以没有句法谓词 https://stackoverflow.com/questions/5728659/translate-antlr-grammar-into-xtext-grammar-how-to-remove-syntactic-predicates, no Xtext 未提供 Antlr 的奇特功能 https://stackoverflow.com/questions/5904625/what-are-features-of-antlr-that-xtext-does-not-provide。考虑这个语法
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
keyword
- Include
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
使终端工作
- 向顶级规则添加一个功能,例如
foo: dummy=number+
- 请记住,规则和终端名称必须是唯一的,即使不区分大小写。
- 或者,将规则名称的首字母大写以遵循 Java 约定。
是否有一个工具可以自动进行这种转换,至少对于简单的情况?如果没有,是否有此类所需修改的更完整清单?
基本上不可能自动执行此转换,因为 Antlr 语法缺乏 Xtext 语法所需的信息。 Xtext 中的规则名称将用于从中创建类。 Xtext 中的一些作业将成为这些类中的 getter 和 setter。然而,这些分配不应该用于每个规则调用,因为 Xtext 中有特殊模式可以减少生成的 AST 中的噪声。诸如此类的事情使得自动进行这种转换几乎不可能。然而,通常可以直接将 Antlr 语法复制到 Xtext 编辑器中并手动修复问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)