【问题标题】:How to generate Java code for Xbase XExpression using JvmModelInferrer?如何使用 JvmModelInferrer 为 Xbase XExpression 生成 Java 代码?
【发布时间】:2020-03-09 05:38:24
【问题描述】:

我正在尝试做一个我能想到的最简单的例子来使用 Xbase 和 JvmModelInferrer,而不是编写代码生成器。我已经减少了 JVM 语言教程,但我无法从 XExpression(或 XBlockExpression)获得正确的 Java 代码。我看过类似的答案:-

How to JvmModelInferrer method body from XExpression and append boilerplate code

我目前遇到的具体错误是,对于像 2+2 这样的表达式,我生成的代码是:-

return 2./* name is null */;

我的语法是:-

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.xbase.Xbase

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
    functions+=Function*
;

Function:
    'function' name=ID 'body' exp=XBlockExpression
;

我的 JvmModelInferrer 是:-

    def dispatch void infer(Model element, IJvmDeclaredTypeAcceptor acceptor, boolean isPreIndexingPhase) {
        acceptor.accept(element.toClass("my.company.Functions")) [
            for (function : element.functions) {
                members += function.toMethod(function.name, typeRef(Object)) [
                    body = function.exp
                ]
            }
        ]
    }

对于输入:-

function TwoPlusTwo body {2+2}

生成的代码是:-

package my.company;

public class Functions {
  public java.lang.Object TwoPlusTwo() {
    return 2./* name is null */;
  }
}

我是在犯一些完全基本的错误还是有一些基本的误解?

我使用的是 Windows 10、Eclipse 2019-12、Xtext 2.20.0、Coretto JVM

任何帮助将不胜感激。

【问题讨论】:

  • 你确定你的模型项目是一个java项目并且在classpath上有xbase.lib
  • 就是这样!我忘记将 Xtend 库添加到构建路径。

标签: xtext xbase


【解决方案1】:

正如 Christian 所建议的,它需要将正确的库添加到项目中。 JVM 语言教程的五个步骤是这样说的,我只是忘了这样做:-

在新的工作台中,创建一个 Java 项目(文件 → 新建 → 项目... → Java 项目)。 Xbase 依赖于类上的一个小型运行时库 小路。要添加它,请右键单击项目并转到 Java Build 路径 → 库 → 添加库并选择 Xtend 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多