2011-05-05 96 views
16

我只是遇到了非常好的工具Xtext来创建DSL以及IDE进行编辑。我在网上做了一些搜索,发现有人说它不提供ANTLR的所有功能。我使用ANTLR作为我的分析器生成器。XText不提供哪些ANTLR的功能?

我甚至不确定ANTLR的哪些功能需要为mylanguage编写完整的解析器,但ANTLR相当长时间,可能支持比Xtext更多的功能。

任何人都可以请一些例子什么不能在Xtext语法中指定?

回答

18

您不能在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 docs对语法语言的更多细节。

+0

重要的一点是,Xtext在内部使用ANTLR和afaik,你一定知道得更好,Xtext迟早会支持更多的ANTLR特性,比如运算符优先级等吧?:) – 2011-05-11 01:52:25

+0

Xtext有Actions的概念(不是与Antlr的黑匣子目标语言文字混淆)来实现运算符优先级。它非常适合我们,特别是在错误恢复非常重要的交互式环境中。我怀疑我们会迁移Antlr新计划来实施precendencies。 – 2011-05-11 04:51:05