【问题标题】:What are features of ANTLR that XText Does not provide?XText 没有提供哪些 ANTLR 功能?
【发布时间】:2018-07-14 20:25:59
【问题描述】:

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

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

谁能给出一些不能在 Xtext 语法中指定的例子?

【问题讨论】:

    标签: eclipse antlr dsl parser-generator xtext


    【解决方案1】:

    您不能在 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 docs 了解有关语法语言的更多详细信息。

    【讨论】:

    • 重点是,Xtext 内部使用了 ANTLR 和 afaik,你肯定知道得更好,Xtext 迟早会支持更多的 ANTLR 特性,比如运算符优先级等,对吧?:)
    • Xtext 具有 Actions 的概念(不要与 Antlr 的黑盒目标语言文字混淆)来实现运算符优先级。它对我们非常有效,尤其是在错误恢复很重要的交互式环境中。我怀疑我们是否会迁移 Antlr 新方案以实现先例。
    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 2019-07-13
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多