Нормальная форма Хомского — различия между версиями
Строка 2: | Строка 2: | ||
*<tex>A \rightarrow BC</tex> | *<tex>A \rightarrow BC</tex> | ||
*<tex>A \rightarrow Bc</tex> | *<tex>A \rightarrow Bc</tex> | ||
+ | *<tex>A \rightarrow bC</tex> | ||
*<tex>A \rightarrow bc</tex> | *<tex>A \rightarrow bc</tex> | ||
*<tex>A \rightarrow a</tex> | *<tex>A \rightarrow a</tex> | ||
*возможно, <tex>S \rightarrow \varepsilon</tex> (при условии, что <tex>S</tex> не содержится в правых частях правил) | *возможно, <tex>S \rightarrow \varepsilon</tex> (при условии, что <tex>S</tex> не содержится в правых частях правил) | ||
− | Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида <tex>A \rightarrow Bc</tex> и <tex>A \rightarrow bc</tex>. | + | Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида <tex>A \rightarrow Bc</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_bC</tex> и <tex>N_b \rightarrow b</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</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> не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в '''нормальной форме Хомского'''. | Теперь у нас остались только правила вида <tex>A \rightarrow BC</tex>, <tex>A \rightarrow a</tex> и, возможно, <tex>S \rightarrow \varepsilon</tex> (при условии, что <tex>S</tex> не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в '''нормальной форме Хомского'''. | ||
− | Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками | + | Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ|алгоритм Кока-Янгера-Касами]] |
Версия 23:25, 14 октября 2010
Рассмотрим контекстно-свободную грамматику , из которой удалены бесполезные символы, , -правиладлинные правила и цепные правила. Такая грамматика содержит только правила следующего вида:
- возможно, (при условии, что не содержится в правых частях правил)
Избавимся от правил, в правых частях которых записаны два символа, один из которых является терминалом, то есть правил вида
, и . Введем для каждого терминала "персональный" нетерминал . Затем правила вида заменим парой правил и , правила вида заменим парой правил и , а правила вида — тройкой правил , и .Теперь у нас остались только правила вида
, и, возможно, (при условии, что не содержится в правых частях правил). Грамматика, содержащая правила только такого вида, называется грамматикой в нормальной форме Хомского.Заметим, что любую контекстно-свободную грамматику можно привести к нормальной форме Хомского. Такая форма грамматики очень удобна для работы многих алгоритмов над грамматиками, например, алгоритм Кока-Янгера-Касами