Xtext/EMF, как сделать преобразование модели в модель?

У меня есть DSL в Xtext, и я хотел бы повторно использовать правила, терминалы и т. д., определенные в моем файле .xtext, для создания файла конфигурации для какого-либо другого инструмента, задействованного в проекте. Файл конфигурации использует синтаксис, аналогичный BNF, поэтому он очень похож на фактическое содержимое Xtext и требует минимальных преобразований. Теоретически я мог бы легко написать скрипт, который будет анализировать Xtext и выдавать мою конфигурацию...

Вопрос в том, как мне реализовать его, чтобы он соответствовал всей экосистеме? Другими словами, как преобразовать модель в модель в Xtext/EMF?


person mirosval    schedule 14.11.2012    source источник


Ответы (2)


Если у вас есть обе метамодели (ecore, xsd,...), лучше всего использовать ATL ( http://www.eclipse.org/atl/).

person xavier.seignard    schedule 14.11.2012

Если я правильно понимаю, вы хотите перейти от модели xtext к ее модели EMF. Вот пример кода, который достигает этого, замените вашу модель, где это необходимо.

    public static BeachScript loadScript(String file) throws BeachScriptLoaderException { 
    try {
        Injector injector = new BeachStandaloneSetup().createInjectorAndDoEMFRegistration();
        XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
        resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
        Resource resource = resourceSet.createResource(URI.createURI("test.beach"));
        InputStream in = new ByteArrayInputStream(file.getBytes());
        resource.load(in, resourceSet.getLoadOptions());
        BeachScript model = (BeachScript) resource.getContents().get(0);
        return model;

    } catch (Exception e) {
        throw new BeachScriptLoaderException("Exception Loading Beach Script " + e.toString(),e );
    }
person Duncan Krebs    schedule 01.12.2012