我刚刚遇到了非常好的工具 Xtext 来创建 DSL 以及用于编辑的 IDE。我在网上做了一些搜索,发现有人说它不提供 ANTLR 的所有功能。我使用 ANTLR 作为我的解析器生成器。
我什至不确定要为我的语言编写完整的解析器需要 ANTLR 的哪些功能,但 ANTLR 已经存在了很长时间,并且可能支持比 Xtext 更多的功能。
任何人都可以举一些Xtext语法中不能指定的例子吗?
我刚刚遇到了非常好的工具 Xtext 来创建 DSL 以及用于编辑的 IDE。我在网上做了一些搜索,发现有人说它不提供 ANTLR 的所有功能。我使用 ANTLR 作为我的解析器生成器。
我什至不确定要为我的语言编写完整的解析器需要 ANTLR 的哪些功能,但 ANTLR 已经存在了很长时间,并且可能支持比 Xtext 更多的功能。
任何人都可以举一些Xtext语法中不能指定的例子吗?
您不能在 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 文档以获取有关语法语言的更多详细信息。