Ссылки на типы C++ в Xtext Grammar/DSL

Я потратил несколько дней, пытаясь придумать решение для ссылки на типы C++ в Xtext DSL. На данный момент я хорошо знаком с механизмом Xtext/Eclipse для эталонных типов Java/JVM.

Предположительно, чтобы сделать что-то похожее на механизм импорта JVM, мне пришлось бы сохранить существующий (возможно, довольно большой) индекс CDT как Ecore и импортировать этот Ecore в мою Xtext Grammar.

Другой альтернативой, которую я рассматриваю, является программная привязка к существующему индексу CDT. Кажется, что этот вариант может быть более сложным, поскольку он, вероятно, потребует реализации большего количества пользовательского кода.

Кто-нибудь обнаружил и успешно реализовал ссылку на типы С++ в грамматике Xtext/DSL? Есть примеры? Любые предложения по лучшему решению? Если на то пошло, кажется ли какое-либо из предложенных мной решений разумным/выполнимым?

Спасибо.


person gdd    schedule 13.11.2012    source источник


Ответы (1)


Чтобы на самом деле иметь возможность ссылаться на C++ или любой другой элемент, не относящийся к Xtext, в DSL Xtext, вы должны внести элементы, на которые можно ссылаться, в индекс Xtext.

Правильным способом было бы иметь IAllContainerState, который включает индекс CDT, и создать IResourceDescription для каждого файла C++. Индекс CDT должен содержать информацию о содержащихся ресурсах, типах и именах, это может быть сопоставлено с концепциями, описанными в главе об области видимости: https://eclipse.org/Xtext/documentation/303_runtime_concepts.html#областьвидимости

GenericResourceServiceProvider можно использовать для IResourceServiceProvider для ресурсов C++.

Взгляните на пакет org.eclipse.xtext.resource.generic и на то, как он используется для индексации моделей .ecore.

person kthoms    schedule 16.11.2016