ANTLR相比XText有哪些特性是XText所不具备的?

20

我刚接触到一个非常好的工具Xtext,可以创建DSL以及用于编辑的IDE。在网上做了一些搜索,发现有人说它不能提供ANTLR的所有功能。我正在使用ANTLR作为我的解析器生成器。

我甚至不确定我需要使用ANTLR的哪些功能来编写完整的语言解析器,但ANTLR已经存在了很长时间,可能支持比Xtext更多的功能。

请问有人能举几个例子说明Xtext语法中不能指定什么吗?

1个回答

23

在Xtext语法中无法指定语义断言。此外,不可能使用Xtext包含任意操作(即:目标语言代码块)。唯一支持的目标平台是Java。

好消息是,通过引入这些限制,Xtext获得了很大的好处,例如,您将得到一个unparser,允许序列化与您的语法匹配的任意模型/语法图。说到语法图,使用Xtext,您将获得一个类型化的语言AST,可在IDE中进行编辑。

Xtext表示中独特的语法特性是无序组。也就是说,您可以直接表达您的语法中某些元素可以以任意顺序出现,但每个元素只能出现一次。如果考虑Java修饰符,这可能非常方便:

  visibility=('public'|'private') // this is a mandatory assignment
& abstractOrFinal=('abstract'|'final')? // this is optional
& static?='static'? // this will become a boolean value in your ast

请查看Xtext文档,了解有关语法语言的更多详细信息。


重要的一点是,Xtext在内部使用ANTLR。你肯定知道得更好,Xtext迟早会支持更多ANTLR功能,比如运算符优先级等,对吧?:) - Gabriel Ščerbák
Xtext有“Actions”的概念(不要与Antlr的黑盒目标语言文字混淆),用于实现运算符优先级。在交互式环境中,它对我们非常有效,尤其是在错误恢复方面。我怀疑我们不会迁移到Antlr新的方案来实现优先级。 - Sebastian Zarnekow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接