Как создавать диалекты с XText - PullRequest
1 голос
/ 15 сентября 2011

Проект, над которым я работаю, имеет собственный формат файла с предопределенной структурой.Структура действительно проста и универсальна (и я не могу ее изменить): она состоит из (вложенных) команд и типизированных свойств.

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

Я создал модель с EMF для одного из этих диалектов, и я хотел бы повторноXText позволяет легко создать профессиональный текстовый редактор и иметь возможность читать и писать мою модель в правильном формате.

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

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

1 Ответ

3 голосов
/ 15 сентября 2011

Xtext позволяет расширять существующие языки: в начале грамматики вы можете указать родительскую грамматику, которая наследуется.

Например, см. Пример модели домена из Xtext 2.0, расширяющий язык XBase:

grammar org.eclipse.xtext.example.domainmodel.Domainmodel with org.eclipse.xtext.xbase.Xbase

Каждый элемент грамматики можно заменить новым синтаксисом;можно добавить новую проверку и т. д. См. следующие сообщения в блоге для дальнейших идей: http://koehnlein.blogspot.com/2011/07/extending-xbase.html

Вы можете использовать тот же подход: создать базовый язык, а затем расширить их для различных диалектов.

...