【问题标题】:Xtext: grammar for language with significant/semantic whitespaceXtext:具有重要/语义空白的语言语法
【发布时间】:2011-08-23 21:33:20
【问题描述】:

如何使用 Xtext 解析带有语义空白的语言?我正在尝试为 CoffeeScript 编写语法,但找不到任何好的文档。

【问题讨论】:

    标签: eclipse parsing grammar coffeescript xtext


    【解决方案1】:

    这是 XText 中的 whitespace sensitive language 示例

    【讨论】:

    • 酷(我将不得不深入研究 XText,一个 not 在这个标签中回答问题......:))!我无法删除我的答案,因为它是公认的答案。 @nicolaskruchten 需要先接受你的,然后我才能删除我的。
    • 现在好像托管在github上github.com/ralfebert/org.eclipselabs.todotext
    • 很遗憾,我在任何地方都找不到这个样本。
    【解决方案2】:

    AFAIK,你不能。

    在解析类 Python 语言的情况下,您需要词法分析器发出 INDENTDEDENT 标记。为此,您需要在词法分析器规则(Xtext 的 terminal 规则)中支持语义谓词,该规则将首先检查输入中下一个字符的当前位置是否等于 0(行)' ''\t'

    但是浏览documentation,我看不到Xtext 目前支持这一点。自 Xtext 2.0 起,在生产规则中添加了对语义谓词的支持(请参阅:6.2.8. Syntactic Predicates),但在终端规则中不支持。

    使用 Xtext 执行此操作的唯一方法是让词法分析器产生终端空格和换行符,但这会使您的生产规则完全混乱。

    如果您想使用 Java(和面向 Java 的解析器生成器)解析这样的语言,我建议您使用 ANTLR,您可以在其中很容易发出 INDENTDEDENT 标记.但是,如果您热衷于 Eclipse 集成,那么我看不出您如何使用 Xtext 来做到这一点,抱歉。

    【讨论】:

      【解决方案3】:

      Xtext 2.8 版支持Whitespace-Aware Languages。此版本附带“家庭自动化示例”,您可以将其用作模板。

      【讨论】:

        【解决方案4】:

        对于对 CoffeeScript 感兴趣的人,Adam Schmideg 有一个 Eclipse plugin that uses XText

        对于有兴趣在 XText 中解析类似 Python 的 DSL 的人,Github 不再提供 Ralf Ebert 的 Todotext 代码,但您可以在 Eclipse test repository 中找到它。请参阅有关这项工作的 original thread 和有关此工作的 Eclipse issue

        我今天一直在使用这段代码,我的结论是它不再适用于当前版本的 XText。在 Eclipse 中使用 XText 时,我认为它会进行“部分解析”。这与处理缩进敏感语言所需的有状态词法分析器不兼容。所以我怀疑即使你修补了词法分析器,Eclipse 编辑器也不起作用。在这个问题中,看起来 Ralf 提出了解决这些问题的补丁,但是查看 XText 源代码,这些更改似乎早就消失了?如果我错了,有人可以让它工作,我会很感兴趣吗?

        有一个不同的实现here,但我也不能让它与当前版本的 XText 一起工作。

        相反,我已切换到parboiled,它支持indentation based grammars

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        • 2017-07-12
        相关资源
        最近更新 更多