Изменения

Перейти к: навигация, поиск
Нет описания правки
'''Задача о выводе в контекстно-свободной грамматике''' - задача о том, выводимо ли данное слово в данной контекстно-свободной грамматике. '''Алгоритм Кока-Янгера-Касами''' - алгоритм, решающий данную задачу. = Определения = == Формальная грамматика ==
'''Формальная грамматика''' - способ описания формального языка, то есть некоторого подмножества слов данного конечного алфавита. Выделяют ''порождающие'' грамматики, состоящие из следующих компонентов:
* 1) # Множество '''терминальных символов''' ('''терминалов''') - символов алфавита, слова над которым определяет грамматика, то есть символов, непосредственно присутствующих в словах языка.* 2) # Множество '''нетерминальных символов''' ('''нетерминалов''') - объектов, выражающих некоторые структурные части языка, не имеющие конкретного представления как слова над алфавитом (таких, как формула или часть программы).* 3) # Множество '''правил вывода''' ('''продукций''') - правил вида L → R, где:** ## L - непустая последовательность терминальных и нетерминальных символов, содержищий по крайней мере один нетерминал.** ## R - любая (возможно, пустая) последовательность терминальных и нетерминальных символов.* 4) # S - стартовый нетерминал.
'''Выводом''' называется последовательность строк из терминалов и нетерминалов, такая, что:
=== Пример ===
Терминалы: {a, b}. Нетерминалы: {S, A, B}. Продукции:
* S → AB
* A → AB
Слова, невыводимые в данной грамматике: a, b, baa, baba, ...
== Контекстно-свободная грамматика ==
'''Контекстно-свободная грамматика''' ('''КС-грамматика''', '''бесконтекстная грамматика''') — частный случай формальной грамматики, у которой левые части всех правил являются одиночными нетерминалами, то есть все её продукции имеют вид L → R, где L - нетерминал, а R - последовательность терминалов и нетерминалов.
=== Пример ===
Терминалы: {(, )}. Нетерминалы: {S}. Продукции:
* S → SS
* S → ()
* S → (S) → (SS) → (()(S)) → (()(()))
== Нормальная форма Хомского ==
'''Нормальная форма Хомского''' - нормальная форма КС-грамматик, в которой все продукции имеют вид:
* S → ε, где S - начальный нетерминал и ε - пустая строка (данная продукция необходима, если в языке присуствует пустая строка)
ПокажемМожно показать, что любую КС-грамматику можно привести к нормальной форме Хомского. Рассмотрим продукцию этой грамматики: <tex>A \Rightarrow A_1 A_2 A_3 ... A_n</tex>, где <tex>A_i</tex> - терминалы или нетерминалы. Добавим к грамматике нетерминалы <tex>B_1 ... B_n</tex>, <tex>C_k</tex> для таких k, что <tex>A_k</tex> - нетерминал, и продукции вида* <tex>A \Rightarrow B_1</tex>* <tex>B_i \Rightarrow A_i B_{i+1}</tex> если <tex>A_i</tex> - нетерминал* <tex>B_i \Rightarrow C_i B_{i+1}</tex> и <tex>C_i \Rightarrow A_i</tex>, если <tex>A_i</tex> - терминал Очевидно, что добавленные элементы в совокупности дают рассмотренную продукцию. Проделав данную процедуру ко всем продукциям, мы и получим нормальную форму Хомского для данной грамматики.
= Алгоритм Кока-Янгера-Касами =
54
правки

Навигация