Конвертировать простую грамматику Antlr в Xtext - PullRequest
10 голосов
/ 26 ноября 2011

Я хочу преобразовать очень простую грамматику Antlr в Xtext, поэтому нет синтаксических предикатов , нет причудливых функций Antlr, не предоставляемых Xtext . Рассмотрим эту грамматику

grammar simple; // Antlr3

foo: number+;
number: NUMBER;
NUMBER: '0'..'9'+;

и его аналог Xtext

grammar Simple; // Xtext
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate Simple "http://www.example.org/Simple"

Foo: dummy=Number+;
Number: NUMBER_TOKEN;
terminal NUMBER_TOKEN: '0'..'9'+;

Xtext использует Antlr за кулисами, но эти два формата не совсем одинаковы. Есть довольно много раздражающих (и частично понятных) вещей, которые я должен изменить, включая:

  • Префиксные терминалы с ключевым словом terminal
  • Включите import "http://www.eclipse.org/emf/2002/Ecore" as ecore для работы терминалов
  • Добавить функцию в правило верхнего уровня, например, foo: dummy=number+
  • Имейте в виду, что имена правил и терминалов должны быть уникальными, даже без учета регистра.
  • Опционально, используйте первую букву имени правила, чтобы следовать соглашению Java.

Существует ли инструмент для автоматического преобразования, по крайней мере, для простых случаев? Если нет, есть ли более полный контрольный список таких необходимых изменений?

1 Ответ

3 голосов
/ 28 ноября 2011

В принципе невозможно выполнить это преобразование автоматически, поскольку в грамматике Antlr отсутствует информация, которая требуется в грамматике Xtext.Имена правил в Xtext будут использоваться для создания классов из них.В Xtext есть назначения, которые станут получателями и установщиками в этих классах.Однако эти назначения не следует использовать для каждого вызова правила, поскольку в Xtext существуют специальные шаблоны, позволяющие уменьшить шум в результирующем AST.Подобные вещи едва ли позволяют сделать это преобразование автоматически.Однако обычно просто скопировать грамматику Antlr в редактор Xtext и исправить проблемы вручную.

...