== Порождающие и непорождающие нетерминалы ==
{{Определение
|definition=
Символ Нетерминал <tex>A</tex> называется '''порождающим''', если из него может быть выведена конечная терминальная цепочка. Иначе он называется '''непорождающим'''.
}}
# Получено множество всех порождающих нетерминалов грамматики, а все нетерминалы, не попавшие в него, являются непорождающими.
При удалении из грамматики непорождающих нетерминалов и правил, их содержащих, язык не изменится, так как эти нетерминалы по определению не могли встречаться в выводе какого-либо слова.
{{Лемма
|statement=
После удаления из грамматики правил, содержащих непорождающие нетерминалы, язык не изменится.
|proof=
Непорождающие нетерминалы по определению не могли участвовать в выводе какого-либо слова.
}}
== Достижимые и недостижимые нетерминалы ==
{{Определение
|definition=
# Получено множество всех достижимых нетерминалов, а нетерминалы, не попавшие в него, являются недостижимыми.
При удалении из грамматики недостижимых нетерминалов и правил, их содержащих, язык не изменится, так как поскольку эти нетерминалы недостижимы из стартового, то и в выводе какого-либо слова они встречаться не могли.
{{Лемма
|statement=
После удаления из грамматики правил, содержащих недостижимые нетерминалы, язык не изменится.
|proof=
Недостижимые нетерминалы по определению не достижимы из стартового, следовательно они не могли участвовать в выводе какого-либо слова.
}}
== Полезные и бесполезные нетерминалы ==
{{Определение
|definition=
}}
==Алгоритм==
Алгоритм удаления бесполезных нетерминалов из грамматики прост, как три рубля.
# Удалить из грамматики непорождающие нетерминалы и правила, в которых они встречаются.
# Удалить из грамматики недостижимые нетерминалы и правила, в которых они встречаются.
После сих действий в грамматике не будет == Алгоритм удаления бесполезных символовнетерминалов ==# Удалить из грамматики правила, содержащие непорождающие нетерминалы.# Удалить из грамматики правила, содержащие недостижимые нетерминалы.
==Корректность алгоритма==
Корректность алгоритма вытекает из [[#th1|первой теоремы]] и следующей.
{{Теорема
|id=th2
|statement=
Пусть <tex>\Gamma</tex> - грамматика без непорождающих нетерминалов. Тогда после удаления недостижимых нетерминалов новые непорождающие не появятсяАлгоритм корректен.
|proof=
Достаточность данных действий следует из доказанной выше теоремы. Докажем, что после выполнения второго шага не могут появиться новые непорождающие нетерминалы.Допустим, что в грамматике появился непорождающий нетерминал <tex>A</tex>. Так как до удаления недостижимых нетерминалов существовал вывод из <tex>A</tex> конечной цепочки терминалов, то удалилось было удалено хотя бы какое-то одно или несколько правил правило из этого вывода. Возьмем первое удаленное удалённое правило <tex>CB\rightarrow\alpha</tex>. Оно могло удалиться быть удалено тольков том случае, если в <tex>\alpha</tex> присутствуют недостижимые символынетерминалы. Но так как было выбрано первое удаленное удалённое правило из вывода, то <tex>CB</tex> — достижим, а, следовательно, достижимы и все символы нетерминалы из <tex>\alpha</tex>. Значит, это правило удалиться не моглобыть удалено.
}}
''Примечание:''
Эти шаги нельзя менять местами. Рассмотрим следующую грамматику:
<tex>\begin{array}{l l} S\rightarrow AB|a</tex>\\<tex> A\rightarrow b\end{array}.</tex> Если начать с проверки достижимостиВсе нетерминалы в этой грамматике достижимы. Однако, то все символы грамматики оказываются достижимыми. Если затем если удалить <tex>B</tex> как непорождающий символ, то останется грамматика с бесполезными символами нетерминал <tex>A</tex> и <tex>b</tex>станет недостижимым.
== Литература ==
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)