Информация, пример и задание по "КС

advertisement
Тема 9: Контекстно-свободные грамматики
Контекстно-свободная
грамматика
(КС-грамматика,
бесконтекстная грамматика) — частный случай формальной грамматики
(2-го типа по иерархии Хомского), у которой левые части всех продукций
являются одиночными нетерминалами.
Определение:
Контекстно-свободной
называется
порождающая
грамматика, каждое правило которой имеет вид A → , где A VN,
(VNVТ)*
-
Слева
—
один
нетерминал,
справа
—
любая
последовательность символов.
Примеры:
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}
Смысл термина «контекстно-свободная»: возможность применить
продукцию не зависит от контекста этого нетерминала.
Определение:
Язык,
который
может
быть
задан
КС-грамматикой,
называется контекстно-свободным языком или КС-языком. Контекстносвободные языки называются также алгебраическими языками.
Деревья вывода
Выводам в контекстно-свободной грамматике соответствуют так
называемые
деревья
упорядоченные
вывода
деревья,
(или
вершины
деревья
которых
разбора)
некоторые
помечены
символами
алфавита.
Корень дерева отвечает начальному символу.
Напирмер, если AX1X2...Xn, X1Y1Y2..., где X1,X2,...,Xn, Y1, Y2
VNVТ, то
Корень
дерева
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. Для разбора КС-грамматик используются автоматы со стеком
(магазинные автоматы).
Download