3. А®аS; 4. А®вАа; 5. А®а; 6. В®вS; 7. В®аВв; 8. В®в}.
Типичные выводы предложений:
1. .
В скобках над стрелками указан номер используемого правила вывода. Вывод заканчивается, так как нет правила с левой частью равной ав.
2. .
3. .
4. .
Граф такой порождающей грамматики изображен на рис.10.1.
Пример 2. Пусть грамматика задана следующим образом:
Т={выводит, доставляет, аппарат, груз, ракета, мощная, твердотопливная, красивая};
N={с -(сказуемое), П - (подлежащее), О - (определение), Д - (дополнение), ГП - (группа подлежащего), ГС - (группа сказуемого), ПР - (предложение)};
S = {ПР - предложение}.
Рис.10.1. Граф порождающей грамматики
Построим некоторые цепочки языка:
ПР(ГП)(ГС)(О)(П)(ГС)(О)(П)(С)(Д)
МОЩНАЯ (П)(С)(Д)МОЩНАЯ РАКЕТА (С)(Д)
МОЩНАЯ РАКЕТА ДОСТАВЛЯЕТ (Д)МОЩНАЯ РАКЕТА ДОСТАВЛЯЕТ ГРУЗ
Очевидно, что последняя цепочка вывода является заключительной и представляет собой предложение естественного языка. Аналогично можно вывести цепочку КРАСИВАЯ РАКЕТА ВЫВОДИТ АППАРАТ и ряд других. Заметим, что в этом примере нетерминальными символами являются синтаксические категории.
Вывод можно также описать так называемым структурным деревом, удовлетворяющим следующим требованиям:
1) каждая вершина дерева имеет в качестве метки символ из V=ТUN;
2) корень дерева, т.е. вершина, в которую не входит ни одно ребро, имеет метку S (начальный символ, аксиома грамматики);
3) если вершина с некоторой меткой Dимеет хотя бы одну подчиненную вершину, тоDÎN;
4) если некоторые nвершин с меткамиD1,D2,...,Dnподчинены непосредственно вершине с меткойD, то в Р существует правилоD®D1...Dn.
Структурное дерево для примера 2 изображено на рис.10.2.
Рис.10.2. Структурное дерево
10.3. Классификация формальных грамматик
Итак, формальные грамматики могут быть распознающими, порождающими, преобразующими. Кроме того, в теории формальных грамматик различают четыре типа языков, порождаемых четырьмя типами грамматик. Грамматики выделяются путем положения последовательно усиливающихся ограничений на систему правил Р.
Общепринятой классификацией грамматик и порождаемых ими языков является иерархия Хомского, содержащая четыре типа грамматик.
Грамматика типа О - это грамматики, в которых не накладывается никаких ограничений на правила вывода j®y, гдеjиyмогут быть любыми цепочками изV. Такая грамматика может быть реализована машиной Тьюринга. При этом состояние машины Тьюринга соответствуют нетерминальным (вспомогательным) символам, а символы на ленте - терминальными. Правила порождения цепочек описываются системой команд.
Грамматика типа 1 - это грамматика, все правила которой имеют вид aАb®awb, гдеwÎТUN, А - нетерминальный символ. Цепочкиaиb- контекст правил. Они не изменяются при его применении. Таким образом, в грамматиках типа 1 отдельный терминальный символ А переходит в непустую цепочкуw(А можно заменить наw) только в контекстеaиb. Грамматики типа 1 называюконтекстнымииликонтекстно-зависимыми.
Контекстные грамматики реализуются устройствами типа автомата Майхилла с правилами вида (i,j,k,l,p): если автомат находится в состоянииj, а считывающая головка напротив клетки с символомi, то автомат переходит в состояниеk, в то время как лента продвигается наlклеток влево, и рассматриваемый символ заменяется на символ р.
Грамматика типа 2 - это грамматики, в которых допустимы лишь правила вида А®a, гдеaÎТUN, т.е.a- непустая цепочка изV. Грамматика типа 2 называют бесконтекстными или контекстно-свободными (КС).
Язык, порождающий бесконтекстной грамматикой, реализуется автоматом Майхилла специального вида, в котором используется магазинная память (магазинные автоматы). В таком автомате имеются три магазина, каждый из которых представляет бесконечную в одну сторону ленту. На ленте записано слово, первая буква которого записана в первой ячейке, второе - во второй и т.д. При чтении воспринимается первая буква слова, затем она стирается, а оставшаяся часть слова сдвигается к первой ячейке. При записи в магазин слова длины kпервыеkячеек освобождаются в результате записанного ранее сдвига слева наkячеек. Входной магазин связан с входными каналами управляющего автомата, выходной - с выходными каналами, внутренний - как с входными, так и с выходными каналами. Множество внутренних состояний разбито на два подмножества: А и В. Если автомат находится в состоянии, принадлежащему подмножеству А, то происходит считывание из входного и внутреннего магазина. Если автомат находится в состоянии, принадлежащем В, то происходит считывание только из внутреннего магазина, при этом автомат переходит в следующее состояние и зависит во внутренний или выходной магазин слова.
Грамматики типа 3 имеют правила вида А®аВ, либо А®в, где А,ВÎN; а,вÎТ.
Здесь А,В,а,в - одиночные символы (не цепочки) соответствующих словарей. Языки, которые задаются грамматиками этого типа называются автоматнымиили регулярными. Материал последующих лекций будет и посвящен автоматам.
Примеры:
1) Грамматика унарного представления чисел ³1 порождает множество цепочек вида а, аа, ааа, ааа. Она задается грамматикойG=<T,N,P,I>, гдеT={a}, N={I},I- начальный символ, а Р содержит правила:
Тогда
Ia;
IaIaa;
IaIaaIaaaи т.д.
Ясно, что 1 - всегда заключительное правило.
Из вида правил следует, что это грамматика типа 3, автоматная грамматики.
Язык, порождаемый этой грамматикой имеет вид {an}.
2) Язык булевых формул с переменными а,в порождается КС - грамматикой (типа 2), где T={а,в,×,-,(,)}, N={I}, I - начальный символ, Р содержит
Получим, например, константу 0:
I(I×I)(a×I)(a×)(a×).
т.е. получили константу 0.
Получим константу 1:
I,
т.е. получили константу 1.
Таким образом, формальные грамматики способны порождать любые перечислимые множества.
10.4. Алгоритмические проблемы для грамматик
Связь языка с порождающей его грамматикой имеет ту же природу, что и связь функции с вычисляющим ее алгоритмом. Поэтому проблемы распознавания свойств языка по свойствам задающей его грамматики часто оказываются алгоритмами неразрешимыми.
В частности, неразрешима проблема распознавания эквивалентности двух грамматик (разрешим лишь ее частный случай, когда обе грамматики имеют тип 3).
Для языков типа 0 справедлив аналог теории Райса: ни для какого нетривиального свойства языков типа 0 не существует алгоритма, который по произвольной грамматике Gвыяснял бы, обладает ли этим свойством языкL(G).