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