Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ
Версия от 22:15, 1 марта 2011; Panichev.Nikolay (обсуждение | вклад)
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Алгоритм для НФХ-грамматики
Пусть приведена к нормальной форме Хомского.
Пусть , если из нетерминала можно вывести подстроку . Иначе :
.
Будем динамически заполненять матрицу следующим алгоритмом:
- База. Ячейки заполняются истиной, если правило принадлежит множеству правил грамматики :
.
- Переход. Пусть на текущем шаге . Если все ячейки, для которых справедливо , уже вычислены, то алгоритм смотрит, можно ли вывести подстроку из этих ячеек:
.
- Завершение. После окончания работы ответ содержится в ячейке , где .
Сложность алгоритма
Необходимо вычислить булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .
Алгоритму требуется памяти, где – количество нетерминалов грамматики.
Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.
