Цель: найти способ формального определения грамматики, которая распознает элементы из множества 0 или 1 раз в любом порядке. Впоследствии я хочу разобрать его и также сгенерировать AST.
Например: скажем, набор допустимых строк на моем языке равен {A, B, C}
. Я хочу определить грамматику, которая распознает все допустимые перестановки любого количества этих элементов.
Синтаксически допустимые строки будут включать:
- (пустая строка)
A
,B A
иC A B
Синтаксически недопустимые строки будут включать:
A A
иB A C B
Чтобы было ясно, явное определение всех возможных перестановок в CFG неприемлемо для моих целей, поскольку невозможно поддерживать большие наборы.
Насколько я понимаю, такой язык не соответствует лемме накачки для контекстно-свободных языков, поэтому решение не будет контекстно-свободным или регулярным.
Обновлять
То, что мне нужно, называется «языком перестановок», который Бенедек Надь проделал некоторую теоретическую работу над расширением контекстно-свободных языков.
Что касается генератора синтаксических анализаторов, я нашел только разговоры о реализации синтаксических анализаторов с фазой перестановки (ссылка а>). Парсеры, очевидно, имеют экспоненциальную нижнюю границу размера результирующего CFG, и я так или иначе не нашел никаких генераторов парсеров, которые бы это поддерживали.
Своего рода решение этой проблемы было написано в ANTLR. Он использует семантические предикаты, чтобы «кодировать» проблему.
w1|w2|w3|w4...|wlast
, что, очевидно, является регулярным выражением.) Этот факт не очень полезен для вас, но все же факт. - person rici   schedule 27.08.2013