19

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

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

任何人都可以举一些Xtext语法中不能指定的例子吗?

4

1 回答 1

22

您不能在 Xtext 语法中指定语义谓词。此外,不可能在 Xtext 中包含任意操作(阅读:目标语言代码块)。唯一受支持的目标平台是 Java。

好消息是,Xtext 通过引入这些约束获得了巨大的好处,例如,您将获得一个允许序列化与您的语法匹配的任意模型/语法图的解解析器。谈到语法图,使用 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 文档以获取有关语法语言的更多详细信息。

于 2011-05-05T22:15:54.857 回答