Удаление длинных правил из грамматики — различия между версиями
Grechko (обсуждение | вклад) |
Grechko (обсуждение | вклад) |
||
Строка 18: | Строка 18: | ||
<tex>\ldots </tex> <br> | <tex>\ldots </tex> <br> | ||
<tex>B_{k-2} \rightarrow a_{k-1}a_{k}</tex> <br> | <tex>B_{k-2} \rightarrow a_{k-1}a_{k}</tex> <br> | ||
− | Удалим из грамматики правило <tex>A \rightarrow a_1 a_2 \ldots a_k</tex>. Проделаем описанную операцию с каждым длинным правилом в <tex>\Gamma</tex> | + | Удалим из грамматики правило <tex>A \rightarrow a_1 a_2 \ldots a_k</tex>. Проделаем описанную операцию с каждым длинным правилом в <tex>\Gamma</tex>. |
== Пример работы == | == Пример работы == |
Версия 23:35, 26 октября 2011
Задача удаления длинных правил из грамматики возникает при попытке ее приведения к нормальной форме Хомского.
Определение: |
Пусть контекстно-свободная грамматика. Правило называется длинным если | —
Постановка задачи
Пусть контекстно-свободная грамматика, содержащая длинные правила. Требуется построить эквивалентную грамматику , не содержащую длинных правил.
—Алгоритм
Расмотрим длинное правило
Добавим в грамматику новых нетерминалов
Добавим в грамматику новое правило:
Удалим из грамматики правило . Проделаем описанную операцию с каждым длинным правилом в .
Пример работы
Покажем, как описанный алгоритм будет работать на следующей грамматике:
Для правила
Для правила
В итоге, полученная грамматика