Тема 9: Контекстно-свободные грамматики Контекстно-свободная грамматика (КС-грамматика, бесконтекстная грамматика) — частный случай формальной грамматики (2-го типа по иерархии Хомского), у которой левые части всех продукций являются одиночными нетерминалами. Определение: Контекстно-свободной называется порождающая грамматика, каждое правило которой имеет вид A → , где A VN, (VNVТ)* - Слева — один нетерминал, справа — любая последовательность символов. Примеры: 1) Язык Дика - Словами этого языка являются последовательности правильно вложенных скобок n типов - {(n)n | n≥0}. G=(VT, VN , P, S), VT ={(,)}, VN = {S}, P= {1.S→(S), 2.S→ε} 2) Арифметическое выражение G=(VT, VN , P, S), VT ={+, -, *, /, (,), а}, VN = {S, T, F}, P= {1.S→S+T, 2.S→S-T, 3.S→T, 4.T→T*F, 5.T→T/F, 6.T→F, 7.F→(S), 8.F→a} Смысл термина «контекстно-свободная»: возможность применить продукцию не зависит от контекста этого нетерминала. Определение: Язык, который может быть задан КС-грамматикой, называется контекстно-свободным языком или КС-языком. Контекстносвободные языки называются также алгебраическими языками. Деревья вывода Выводам в контекстно-свободной грамматике соответствуют так называемые деревья упорядоченные вывода деревья, (или вершины деревья которых разбора) некоторые помечены символами алфавита. Корень дерева отвечает начальному символу. Напирмер, если AX1X2...Xn, X1Y1Y2..., где X1,X2,...,Xn, Y1, Y2 VNVТ, то Корень дерева A X1 Y1 … X2 Xn Y2 потомки Примечание: Для любого вывода можно построить единственное дерево. Например для следующей грамматики G=(VT, VN , P, S), VT ={+, -, *, /, (,), а}, VN = {S, T, F}, P= {1.S→S+T, 2.S→S-T, 3.S→T, 4.T→T*F, 5.T→T/F, 6.T→F, 7.F→(S), 8.F→a} можно построить несколько деревьев вывода следующих слов a-a+a*a, a+a-a/a*(a+a): S + S S T F … T T T * F F a F a a a Определение: Кроной дерева вывода называется слово, записанное в вершинах, помеченных символами из алфавита VТ. Слово читается при прохождении дерева сверху вниз (от корня), слева направо. Определение: Вывод в контекстно свободной грамматике называется левосторонним (левым), если на каждом шаге вывода заменяется самая левая из всех вхождений вспомогательных символов (нетерминалы). Правосторонний вывод определяется аналогично. Пример: G=(VT, VN , P, S), VT ={а, b}, VN = {S}, P= {1.S→SS, 2.S→ab, 3.S→aSb} Вывод S→SS→Sab→SSab→abSab→ababab – не является левосторонним и так же не является правосторонним. Вывод левосторонним. S→SS→abS→abSS→ababab→ababab – является Вывод S→SS→Sab→SSab→Sabab→ababab – является правосторонним. Задание: Построить выводы и деревья вывода для 3-х слов следующей грамматики G=(VT, VN , P, S), VT ={а, b}, VN = {S, T}, P= {1.S → TS, 2.S → T, 3.T → ab, 4.T → aSb}. Выводы: 1. КС-грамматики - самые распространенные грамматики и являются прототипом языков программирования. Ими задаётся грамматическая структура большинства языков программирования, структурированных данных и т. д. 2. Для разбора КС-грамматик используются автоматы со стеком (магазинные автоматы).