Какие функции ANTLR не предоставляет XText?

Я только что наткнулся на очень хороший инструмент Xtext для создания DSL, а также IDE для редактирования. Я провел поиск в Интернете и нашел людей, говорящих, что он не предоставляет все функции ANTLR. Я использую ANTLR в качестве генератора парсеров.

Я даже не уверен, какие функции ANTLR мне понадобятся, чтобы написать полный синтаксический анализатор для моего языка, но ANTLR существует уже довольно давно и, вероятно, поддерживает больше функций, чем Xtext.

Кто-нибудь может привести несколько примеров того, что НЕ МОЖЕТ быть указано в грамматике Xtext?


person Tasawer Khan    schedule 05.05.2011    source источник


Ответы (1)


Вы не можете указать семантические предикаты в грамматике Xtext. Кроме того, невозможно включить произвольные действия (читай: блоки кода целевого языка) в Xtext. Единственной поддерживаемой целевой платформой является Java.

Хорошая новость заключается в том, что Xtext получает большую выгоду, вводя эти ограничения, например. вы получите непарсер, который позволяет сериализовать произвольные модели/графы синтаксиса, которые соответствуют вашей грамматике. Говоря о синтаксических графах, с Xtext вы получите типизированный AST для вашего языка, который вы можете редактировать в своей IDE.

Особенностью грамматики, уникальной в представлении Xtext, являются неупорядоченные группы. То есть вы можете прямо выразить, что определенные элементы в вашей грамматике могут встречаться в произвольном порядке, но каждый только один раз. Если вы думаете о модификаторах java, это может быть очень удобно:

  visibility=('public'|'private') // this is a mandatory assignment
& abstractOrFinal=('abstract'|'final')? // this is optional
& static?='static'? // this will become a boolean value in your ast

Обратитесь к документам Xtext, чтобы узнать больше о языке грамматики.

person Sebastian Zarnekow    schedule 05.05.2011
comment
Важным моментом является то, что Xtext использует внутри себя ANTLR, и, на самом деле, вы наверняка знаете лучше, Xtext рано или поздно будет поддерживать больше функций ANTLR, таких как приоритет операторов и т. д., верно? :) - person Gabriel Ščerbák; 11.05.2011
comment
Xtext имеет концепцию действий (не путать с литералами целевого языка Antlr «черный ящик») для реализации приоритета операторов. Это работает очень хорошо для нас, особенно в интерактивной среде, где восстановление после ошибок имеет большое значение. Сомневаюсь, что мы будем мигрировать Antlr на новую схему реализации прецедентов. - person Sebastian Zarnekow; 11.05.2011