Изменения

Перейти к: навигация, поиск

Удаление eps-правил из грамматики

428 байт убрано, 07:41, 22 ноября 2011
Поиск ε-порождающих нетерминалов
''Схема алгоритма:''
# Если <tex>A \rightarrow \varepsilon</tex> — правило грамматики <tex>G</tex>, то <tex>A</tex> — <tex>\varepsilon</tex>-порождающий нетерминал.
# Если <tex>B \rightarrow C_1C_2...C_k</tex> — правило грамматики <tex>G</tex>, где каждый <tex>C_i</tex> — <tex>\varepsilon</tex>-порождающий нетерминал, то <tex>B</tex> — <tex>\varepsilon</tex>-порождающий нетерминал.
{{Теорема
|statement = Нетерминал <tex>A</tex> является <tex>\varepsilon</tex>-порождающим тогда и только тогда, когда вышеприведенный алгоритм идентифицирует если выполнено одно из следующих условий:# в грамматике <tex>G</tex> есть правило <tex>A\rightarrow \varepsilon</tex>;# в грамматике <tex>G</tex> есть правило <tex>A \rightarrow C_1C_2...C_k</tex>, где каждый <tex>C_i</tex> как <tex>\varepsilon</tex>-порождающийнетерминал.
|proof = Индукция по длине кратчайшего порождения <tex>A \Rightarrow^* \varepsilon</tex>
:''База.'' <tex>A \Rightarrow^* \varepsilon</tex> за один шаг, то есть правило <tex>A \rightarrow\varepsilon</tex>. Следовательно <tex>А - \varepsilon</tex>-порождающий нетерминал <tex>A</tex> обнаруживается алгоритмом согласно первому пункту алгоритма.
:''Индукция.'' Пусть <tex>A \Rightarrow^* \varepsilon</tex> за <tex>n</tex> шагов. Тогда первых шаг порождения <tex>A \rightarrow C_1C_2...C_k</tex>, где <tex>C_i \Rightarrow^* \varepsilon</tex> за менее, чем <tex>n</tex> шагов. По индукционному предположению каждый нетерминал <tex>C_i</tex> обнаруживается как <tex>\varepsilon</tex>-порождающий. Тогда нетерминал <tex>A</tex> обнаружиться вторым пунктом алгоритма как <tex>- \varepsilon</tex>-порождающий.
}}
Анонимный участник

Навигация