Acceleo - ссылка на другую модель - PullRequest
0 голосов
/ 29 мая 2018

Я сталкиваюсь с проблемой, и я немного не в себе:

Я пытаюсь преобразовать OCL-ограничение в C # -программу.Для этого я определяю свои ограничения ocl в документе CompleteOCL и сохраняю его как абстрактный синтаксис: POC.ocl.oclas.Затем я использую Acceleo с мета-моделью Pivot ('http://www.eclipse.org/ocl/2015/Pivot').

). Однако общие операции OCL (например, "размер") определяются в другой модели: библиотеке. Поэтому при попытке восстановить используемые операциина моей модели OCL ничего не произошло, я могу восстановить только операцию, которую я определил в своем документе ocl.

Когда я открыл POC.ocl.oclas, у меня есть эти 2 модели: POC.ocl model +Модель библиотеки .

Я определил это поколение:

[comment encoding = UTF-8 /]
[module generate('http://www.eclipse.org/ocl/2015/Pivot','http://www.eclipse.org/ocl/2015/Library')]

[template public generateElement(aModel : Model)]
[comment @main/]
[file (aModel.name + 'xx', false, 'UTF-8')]
yo
[/file]
[/template]

И оно генерирует только один файл: "POC.oclxx", а не "Library.oclxx"

Это привело нас к этому вопросу: возможно ли в Acceleo сделать ссылку на другую модель (кроме основной)? И если это так, как это сделать?


ANNEXE:

Код, который я написал:

[comment getCode() opération/]
[template public getCode(operationCallExp : pivot::OperationCallExp) post (trim())]
[operationCallExp.ownedSource.getCode()/] 
[operationCallExp.referredOperation.name/][operationCallExp.ownedArguments -> getArguments()/]
[/template]

Теоретически, [operationCallExp.referredOperation.name/] дает мне название операции. В действительности это ничего не дает мне, за исключением случаев, когда я определил операцию (и, следовательно, когдаоперация не из библиотеки OCL)

Заранее спасибо!


Архивированный проект: Archive_OCL_Acceleo

Папка POC содержит метамодель POC (POC.ecore), ограничение OCL для этой метамодели (POC.ocl)и сотрудник модели Pivot (POC.ocl.oclas).Файлы, сгенерированные Acceleo, находятся в папке файлов

Фордер POC_Acceleo содержит преобразование Acceleo (generate.mtl)

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Используете ли вы последний код?Я помню, как недавно исправил несколько ошибок, связанных с отсутствующим «косметическим» содержанием модели AS.

0 голосов
/ 29 мая 2018

Исходя из расширения * .oclas, я полагаю, что вы используете абстрактный синтаксис Eclipse OCL на основе / my Pivot.

Моя первая попытка генерации кода Java из OCL использовала Acceleo, но я отказалсяЭто происходит по разным причинам, не в последнюю очередь из-за того, что переход от OCL AS к Java-коду слишком велик, чтобы выполнить его за один шаг M2T.Хотя Java (и, без сомнения, C #) обманчиво похожа на OCL, что делает простой перевод на основе текстовых шаблонов привлекательным, этот подход обречен на поддержку только скромного языкового подмножества.Генерация реального кода требует реального анализа, такого как устранение Common Subexpression, и они приводят к конфликту между сохраненным исходным кодом и перезаписанным исходным кодом, если вы переписываете исходный код.

В текущем Eclipse OCL to Java Generator (моя третья попытка) используется промежуточныйCG модель, где происходит переписывание.Он предназначен для перенаправления на C (или C # или ...).У меня есть много планов для более высокого уровня автогенерации в моей следующей (четвертой) попытке с дальнейшей промежуточной моделью Java (или C или C # или ...), чтобы отделить «тривиальную» сериализацию текстового языка от нетривиального языкаСинтез концепции.

Если вас интересует серьезный, а не упрощенный пример инструмента для генерации C #, я настоятельно рекомендую вам взглянуть на Eclipse OCL CG.Если вы хотите работать вместе, чтобы сделать его лучше, и рады предоставить вам свои материалы в соответствии с EPL, возможно, мы сможем что-то организовать.

...