【问题标题】:Referring to generated types in Xtext/Xbase grammar在 Xtext/Xbase 语法中引用生成的类型
【发布时间】:2017-06-02 00:15:18
【问题描述】:

我正在使用 Xbase 研究 Xtext 语法。该语法允许用户从一个 DSL 文件创建一组具有超类型的 Java 类。因此,我创建了如下规则:

javaClass:
  name=ID ':' supertype=JvmParameterizedTypeReference

只要类型不引用由 DSL 创建的类文件,我的类文件生成器就可以很好地工作。例如,当在第 3 行创建了一个类 ClassA,而在第 4 行定义了另一个具有 supertype=ClassA 的类 ClassB,解析器不接受该文件。

我知道这是因为在解析 ClassB 时 ClassA 不是已知类型,因为生成器是在整个文件被解析后启动的。

是否有可能解决我的问题并使用户能够引用之前在同一个 DSL 文件中声明的类?

【问题讨论】:

    标签: xtext xbase


    【解决方案1】:

    您是否推断出 JVM 模型?它允许首先索引可用的类,然后在所有类都已知时为它们推断 JVM 模型。见:https://eclipse.org/Xtext/documentation/305_xbase.html#xbase-inferred-type

    【讨论】:

    • 是的,我在推断一个模型。我在 modelInferrer 类中为这个文件的根定义了 infer 方法,在整个文件被解析后调用。我尝试为每个定义的类类型额外定义推断方法。我认为这可能会解决我的问题,但这些推断方法永远不会被调用。
    • 你能显示代码吗?可能是您忘记了dispatch 关键字。您应该在每个类上调用 accept 方法以获取它们的索引。
    • 我同时发现了问题 - 似乎仅对匹配的最顶层元素调用 infer 方法。一旦为一个节点调用了 infer 方法,就不会再为任何包含的节点调用它。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    相关资源
    最近更新 更多