142
правки
Изменения
Нет описания правки
*<tex>A \rightarrow bc</tex>
*<tex>A \rightarrow a</tex>
*возможно, <tex>S \rightarrow \varepsilon</tex> (при условии, что <tex>S</tex> не содержится в правых частях правил)
Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида <tex>A \rightarrow Bc</tex> и <tex>A \rightarrow bc</tex>.
Введем для каждого терминала <tex>a</tex> "персональный" нетерминал <tex>N_a</tex>. Затем правила вида <tex>A \rightarrow Bc</tex> заменим парой правил <tex>A \rightarrow BN_c</tex> и <tex>N_c \rightarrow c</tex>, а правила вида <tex>A \rightarrow bc</tex> {{---}} тройкой правил <tex>A \rightarrow N_bN_c</tex>, <tex>N_b \rightarrow b</tex> и <tex>N_c \rightarrow c</tex>.
Теперь у нас остались только правила вида <tex>A \rightarrow BC</tex>, <tex>A \rightarrow a</tex> и , возможно, <tex>S \rightarrow \varepsilon</tex> (при условии, что <tex>S</tex> не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в '''нормальной форме Хомского'''.
Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками.