Как сгенерировать Java код для Xbase XExpression, используя JvmModelInferrer? - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь сделать простейший пример, который я могу использовать для использования Xbase и JvmModelInferrer, вместо написания генератора кода. Я сократил учебник по языку JVM, но не могу получить правильный Java код из XExpression (или XBlockExpression). Я смотрел на ответы, такие как: -

Как получить тело метода JvmModelInferrer из XExpression и добавить шаблонный код

Указанная c ошибка, которую я получаю в настоящее время, заключается в том, что для выражения типа 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 */;
  }
}

Я делаю какую-то основную ошибку c или у меня есть некоторые фундаментальное недоразумение?

Я использую Windows 10, Eclipse 2019-12, Xtext 2.20.0, Coretto JVM

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 марта 2020

Как предполагает Кристиан, в проект должны быть добавлены правильные библиотеки. В учебнике «Пять шагов к вашему языку JVM» сказано следующее, я просто забыл это сделать: -

В новой рабочей среде создайте проект Java (Файл → Создать → Проект… → * 1007). * Проект). Xbase опирается на небольшую библиотеку времени выполнения на пути к классам. Чтобы добавить это, щелкните правой кнопкой мыши проект и выберите go to Java Путь сборки → Библиотеки → Добавить библиотеку и выберите Xtend Library.

...