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