如何使用 JvmModelInferrer 为 Xbase XExpression 生成 Java 代码?
How to generate Java code for Xbase XExpression using JvmModelInferrer?
我正在尝试使用 Xbase 和 JvmModelInferrer 做我能想到的最简单的示例,而不是编写代码生成器。我已经删减了 JVM 语言教程,但无法从 XExpression(或 XBlockExpression)获得正确的 Java 代码。我看过像这样的答案:-
我目前得到的具体错误是,对于像 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 */;
}
}
我是犯了一些完全基本的错误还是有一些根本性的误解?
我正在使用 Windows10、Eclipse 2019-12、Xtext 2.20.0、Coretto JVM
如有任何帮助,我们将不胜感激。
正如 Christian 所建议的,它需要将正确的库添加到项目中。
你的 JVM 语言教程的五个步骤是这样说的,我只是忘了这样做:-
In the new workbench, create a Java project (File → New → Project… →
Java Project). Xbase relies on a small runtime library on the class
path. To add this, right-click on the project and go to Java Build
Path → Libraries → Add Library and choose Xtend Library.
我正在尝试使用 Xbase 和 JvmModelInferrer 做我能想到的最简单的示例,而不是编写代码生成器。我已经删减了 JVM 语言教程,但无法从 XExpression(或 XBlockExpression)获得正确的 Java 代码。我看过像这样的答案:-
我目前得到的具体错误是,对于像 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 */;
}
}
我是犯了一些完全基本的错误还是有一些根本性的误解?
我正在使用 Windows10、Eclipse 2019-12、Xtext 2.20.0、Coretto JVM
如有任何帮助,我们将不胜感激。
正如 Christian 所建议的,它需要将正确的库添加到项目中。 你的 JVM 语言教程的五个步骤是这样说的,我只是忘了这样做:-
In the new workbench, create a Java project (File → New → Project… → Java Project). Xbase relies on a small runtime library on the class path. To add this, right-click on the project and go to Java Build Path → Libraries → Add Library and choose Xtend Library.