首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XExpression为Xbase XExpression生成JvmModelInferrer代码?

如何使用XExpression为Xbase XExpression生成JvmModelInferrer代码?
EN

Stack Overflow用户
提问于 2020-03-09 05:38:24
回答 1查看 188关注 0票数 0

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

How to JvmModelInferrer method body from XExpression and append boilerplate code

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

return 2./* name is null */;

我的语法是:-

代码语言:javascript
复制
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是:-

代码语言:javascript
复制
    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
                ]
            }
        ]
    }

供参考:-

代码语言:javascript
复制
function TwoPlusTwo body {2+2}

生成的代码是:-

代码语言:javascript
复制
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

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-09 12:31:06

正如克里斯蒂安所建议的,它需要将正确的库添加到项目中。您的JVM语言教程的五个步骤是这样说的,我刚刚忘了这么做:-

在新工作台中创建

项目(File→new→Project…)→Java项目)。Xbase依赖于类路径上的一个小型运行时库。要添加此内容,请右键单击该项目并转到Java→库→add并选择Xtend .

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60595204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档