我刚刚遇到了非常好的工具Xtext来创建DSL以及IDE进行编辑。我在网上做了一些搜索,发现人们说它没有提供ANTLR的所有功能。我使用ANTLR作为我的解析器生成器。
我甚至不确定ANTLR的哪些功能我需要为我的语言编写完整的解析器,但ANTLR已存在很长时间,可能支持比Xtext更多的功能。
任何人都可以举一些不能在Xtext语法中指定的例子吗?
答案 0 :(得分:19)
您无法在Xtext语法中指定语义谓词。此外,不可能使用Xtext包含任意操作(读取:目标语言代码块)。唯一受支持的目标平台是Java。
好消息是,Xtext通过引入这些约束获得了很大的好处,例如:你会得到一个允许序列化与你的语法相匹配的任意模型/语法图的不通配符。说到语法图,使用Xtext,您将获得一个可以在IDE中编辑的类型的AST语言。
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。