Xtext: связывание разных корневых элементов с разными расширениями файлов

Чтобы лучше всего проиллюстрировать мое требование, рассмотрим java-подобный язык с классами и интерфейсами.

Этот язык требует, чтобы все классы находились в файле с расширением '.classdef', а все интерфейсы должны находиться в файлах с расширением '.intdef'. Элемент корневой грамматики в этих файлах будет другим.

В файле интерфейса у него будет корневой элемент Interface, который может содержать экземпляры AbstractMethod и StaticConstant.

Элемент корневой грамматики для '.classdef' будет Class и может содержать экземпляры MethodDeclaration, MemberVariable, StaticConstant и т. д.

Возможно ли, чтобы xtext имел другой корневой элемент грамматики в зависимости от расширения файла из одного файла грамматики? Для меня нет смысла разделять это на две связанные грамматики. Мне не нужны два плагина/пакета eclipse для разных грамматик.


Вышеприведенное является просто иллюстрацией. На самом деле у меня есть два разных типа файлов... но два поддерживаемых набора членов между двумя типами файлов почти полностью перекрываются.

Теоретически я мог бы реализовать это в валидаторе, чтобы вы не использовали пропущенный тип в одном из файлов. Но тогда мне также нужно было бы отфильтровать предложение из помощника по контенту и т. д. и т. д.


person jwa    schedule 06.02.2014    source источник


Ответы (1)


как насчет нескольких dsls/языков в сочетании с наследованием, например.

  • baselang (без участия редактора)
  • classlang расширяет baselang
  • interfacelang расширяет baselang
person Christian Dietrich    schedule 07.02.2014
comment
Могу ли я сделать это с помощью одного проекта грамматики / пользовательского интерфейса? Я могу понять, как это сделать с отдельными проектами, но я бы предпочел избежать этих накладных расходов! - person jwa; 07.02.2014
comment
да, вы можете добавить несколько языковых разделов в рабочий процесс, но я не могу сказать, насколько стабильно это работает - person Christian Dietrich; 08.02.2014