Упражнение 2.1.25 |
Нормальные формы контекстно-свободных грамматик
8.2. Устранение эпсилон-правил
Теорема 8.2.1. Пусть язык является контекстно-свободным.
Тогда язык
порождается некоторой контекстно-свободной грамматикой
без
- правил.
Доказательство.
Пусть дана контекстно-свободная грамматика ,
порождающая язык L.
Проведем серию преобразований множества P.
Если для каких-то ,
,
и
множество P содержит правила
и
,
но не содержит правила
,
то добавим это правило в P.
Повторяем эту процедуру, пока возможно.
Теперь исключим из множества P
все правила вида .
Полученная грамматика порождает язык
.
Пример 8.2.2. Рассмотрим язык L, порождаемый грамматикой
![\begin{align*}
S \; & {\to} \; \varepsilon , \\
S \; & {\to} \; aSbS .
\end{align*}](/sites/default/files/tex_cache/1c4994f4dfacf51796c44a7e79749643.png)
![L \sminus \{ \varepsilon \}](/sites/default/files/tex_cache/662831a2b49040ca423bf3e33cae182d.png)
![\begin{align*}
S \; & {\to} \; aSbS , \\
S \; & {\to} \; abS , \\
S \; & {\to} \; aSb , \\
S \; & {\to} \; ab .
\end{align*}](/sites/default/files/tex_cache/11e5cd336dee17d796048b995799ba39.png)
Упражнение 8.2.3. Найти контекстно-свободную грамматику
без -правил,
эквивалентную грамматике
![\begin{align*}
D \; & {\to} \; S c , \\
S \; & {\to} \; S S , \\
S \; & {\to} \; \varepsilon , \\
S \; & {\to} \; a S b .
\end{align*}](/sites/default/files/tex_cache/3b560675c1b8bdfaa6bd896e1632b515.png)
8.3. Нормальная форма Хомского
Определение 8.3.1. Грамматика в нормальной форме Хомского
( грамматика в бинарной нормальной форме,
квадратичная грамматика, grammar in Chomsky normal form) -
контекстно-свободная грамматика ,
в которой
каждое правило имеет один из следующих трех видов:
,
,
,
где
,
,
,
.
Пример 8.3.2. Грамматика
![\begin{align*}
S \; & {\to} \; RR , & A \; & {\to} \; a , \\
S \; & {\to} \; AB , & B \; & {\to} \; RB , \\
R \; & {\to} \; RR , & B \; & {\to} \; b \\
R \; & {\to} \; AB ,
\end{align*}](/sites/default/files/tex_cache/c7fd84dcf0df46001ee994f7f49dfe72.png)
Теорема 8.3.3. Каждая контекстно-свободная грамматика эквивалентна некоторой грамматике в нормальной форме Хомского.
Доказательство.
Пусть дана контекстно-свободная грамматика .
Проведем ряд преобразований этой грамматики так, что порождаемый ею язык
остается неизменным.
Если правая часть какого-нибудь правила содержит символ S,
то заменим грамматику
на грамматику
![\lalg N \cup \{ S_0 \} , \Sigma , P \cup \{ S_0 \tto S \} , S_0 \ralg ,](/sites/default/files/tex_cache/eefd08613d34919775da3cd4ec5c69aa.png)
![N \cup \Sigma](/sites/default/files/tex_cache/a3a0b666c4804d18af1600a8fc0ec10b.png)
Заменим во всех правилах каждый терминальный символ a
на новый нетерминальный символ Ta
и добавим к множеству P
правила
для всех
.
Устраним правила вида ,
где
,
заменив каждое из них на ряд более коротких правил
(при этом добавляются новые нетерминальные символы).
Теперь устраним все правила вида ,
где A не является начальным символом.
Это можно сделать так же, как в доказательстве
теоремы 8.2.1.
Если для каких-то ,
и
множество P содержит правила
и
,
но не содержит правила
,
то добавим это правило в P.
Повторяем эту процедуру, пока возможно.
После этого исключим из множества P
все правила вида
.
Пример 8.3.4. Грамматика
![\begin{align*}
S \; & {\to} \; \varepsilon , \\
S \; & {\to} \; aUbU , \\
U \; & {\to} \; S , \\
U \; & {\to} \; ba
\end{align*}](/sites/default/files/tex_cache/8f46e5ca2c6d94d730bf429564e6a6bc.png)
![\begin{align*}
S_0 \; & {\to} \; \varepsilon , & C \; & {\to} \; BU , \\
S_0 \; & {\to} \; AD , & C \; & {\to} \; b , \\
D \; & {\to} \; UC , & U \; & {\to} \; BA , \\
D \; & {\to} \; BU , & U \; & {\to} \; AD , \\
D \; & {\to} \; b , & A \; & {\to} \; a , \\
& & B \; & {\to} \; b .
\end{align*}](/sites/default/files/tex_cache/81ceca3b73724feffcf9df51055e086d.png)
Теорема 8.3.5. Если контекстно-свободный язык не содержит пустого слова,
то он порождается некоторой грамматикой,
в которой
каждое правило имеет один из следующих двух видов: ,
, где
,
,
,
.
Упражнение 8.3.6. Найти контекстно-свободную грамматику в нормальной форме Хомского, эквивалентную грамматике
![\begin{align*}
F \; & {\to} \; ab , \\
F \; & {\to} \; a F b , \\
F \; & {\to} \; F F .
\end{align*}](/sites/default/files/tex_cache/81e346a3c249046c34c1c50b82672eee.png)