Какие функции ANTLR не предоставляет XText? - PullRequest
17 голосов
/ 06 мая 2011

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

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

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

1 Ответ

20 голосов
/ 06 мая 2011

Нельзя указывать семантические предикаты в грамматике 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 для более подробной информации о языке грамматики.

...