Xtext: грамматика для языка со значительным / семантическим пробелом - PullRequest
11 голосов
/ 24 августа 2011

Как я могу использовать Xtext для разбора языков с семантическим пробелом?Я пытаюсь написать грамматику для CoffeeScript и не могу найти хорошую документацию по этому вопросу.

Ответы [ 4 ]

17 голосов
/ 13 сентября 2011
4 голосов
/ 26 августа 2011

AFAIK, вы не можете.

В случае синтаксического анализа Python-подобных языков вам понадобится лексер для выдачи INDENT и DEDENT токенов. Чтобы это произошло, вам нужно, чтобы семантические предикаты поддерживались в правилах лексера (правила Xtext terminal), которые сначала проверяли бы, равна ли текущая позиция в строке следующего символа в вводе 0 (начало линия) и - это ' ' или '\t'.

Но, просматривая документацию , я не вижу, чтобы это поддерживалось в настоящее время Xtext. Начиная с Xtext 2.0, поддержка была добавлена ​​ для семантических предикатов в производственных правилах (см .: 6.2.8. Синтаксические предикаты ), но не в терминальных правилах.

Единственный способ сделать это с помощью Xtext - позволить лексеру создавать терминальные пространства и разрывы строк, но это приведет к полному беспорядку в ваших производственных правилах.

Если вы хотите анализировать такой язык, используя Java (и генератор синтаксического анализатора, ориентированного на Java), я бы порекомендовал ANTLR, в котором вы можете испускать такие токены INDENT и DEDENT довольно легко. Но если вы заинтересованы в интеграции с Eclipse, то я не понимаю, как вы сможете сделать это с помощью Xtext, извините.

3 голосов
/ 12 февраля 2016

Версия 2.8 Xtext поставляется с поддержкой Пробеловых языков . Эта версия поставляется с «Примером домашней автоматизации», который вы можете использовать в качестве шаблона.

2 голосов
/ 30 апреля 2013

Для людей, интересующихся CoffeeScript, у Адама Шмидега есть плагин Eclipse, который использует XText .

Для людей, заинтересованных в разборе Python-подобных DSL в XText, упомянутый выше код Ральфа Эберта для Todotext больше не доступен в Github, но вы можете найти его в тестовом репозитории Eclipse . См. оригинальный поток об этой работе и проблему Eclipse , которая была поднята об этом.

Сегодня я играл с этим кодом, и я пришел к выводу, что он больше не работает в текущей версии XText. Когда XText используется в Eclipse, я думаю, что он выполняет «частичный анализ». Это несовместимо с лексером с сохранением состояния, который необходим для обработки чувствительных языков отступов. Поэтому я подозреваю, что даже если вы исправите лексер, редактор Eclipse не будет работать. В этом выпуске похоже, что Ральф предложил исправления для решения этих проблем, но, глядя на источник XText, эти изменения, кажется, давно прошли? Если я ошибаюсь и кто-то может заставить его работать, мне было бы очень интересно?

Существует другая реализация здесь , но я также не могу заставить ее работать с текущей версией XText.

Вместо этого я переключился на пропаренный , который поддерживает грамматику на основе отступа из коробки.

...