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