Каковы особенности ANTLR, которые XText не предоставляет?

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

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

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

Ответы

Ответ 1

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

Хорошей новостью является то, что Xtext получает большую пользу, вызывая эти ограничения, например. вы получите unparser, который позволяет сериализовать произвольные модели/синтаксические графики, соответствующие вашей грамматике. Говоря о синтаксических графиках, с помощью 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 docs для более подробной информации о грамматическом языке.