Упражнение 2.1.25 |
Синтаксический разбор
Определение 13.1.22. Сентенциальной формой (sentential form)
грамматики
называется любое слово в алфавите
,
выводимое из начального символа S.
Пример 13.1.23. Слова S, aSeaceSbb, aceaacecbecbb являются сентенциальными формами грамматики из примера 13.1.3.
Определение 13.1.24.
Пусть дана
контекстно-свободная грамматика .
Определим три функции
,
и
,
связанные с грамматикой G.
Для краткости будем писать просто FIRST, FOLLOW и DIRECTOR.
Функция FIRST
ставит
в соответствие
каждому слову
множество тех терминальных символов,
с которых начинаются слова,
выводимые из
,
то есть
![\first( \omega ) \bydef \{ b \in \Sigma \mid
( \exists \theta \in \ns ^* ) \,
\omega \overstar{\Rightarrow} b \theta \} .](/sites/default/files/tex_cache/2c8ea54b61c4081505b20bf8878fd6cc.png)
Функция FOLLOW ставит в соответствие каждому нетерминальному символу A множество тех терминальных символов, которые могут встречаться в сентенциальных формах непосредственно справа от A, то есть
![\follow( A ) \bydef \{ b \in \Sigma \mid
( \exists \eta \in \ns ^* ) \,
( \exists \theta \in \ns ^* ) \,
S \overstar{\Rightarrow} \eta A b \theta \} .](/sites/default/files/tex_cache/27854ca162ed7ee9cd553418df36d388.png)
Функция DIRECTOR
ставит
в соответствие
каждому правилу
множество терминальных символов,
определяемое следующим образом:
если
,
то
![\director( A \tto \alpha ) \bydef \first( \alpha ) \cup \follow( A ) ,](/sites/default/files/tex_cache/b77d3cc1bdf5f9a5d3ad07d87364b7b6.png)
![\director( A \tto \alpha ) \bydef \first( \alpha ) .](/sites/default/files/tex_cache/89a92264d0528a27317b16cb21d5a9ed.png)
Пример 13.1.25. Рассмотрим контекстно-свободную грамматику из примера 13.1.3. Очевидно, что
![\begin{align*}
& \first( c ) = \{ c \} ,\\
& \first( dS ) = \{ d \} ,\\
& \first( aSeSb ) = \{ a \} ,\\
& \follow( S ) = \{ b , e \} ,\\
& \director( S \tto c ) = \{ c \} ,\\
& \director( S \tto dS ) = \{ d \} ,\\
& \director( S \tto aSeSb ) = \{ a \} .
\end{align*}](/sites/default/files/tex_cache/7b33cec8ba648b3c59ab0a31c0029998.png)
Пример 13.1.26.
Рассмотрим контекстно-свободную
грамматику
из примера 13.1.17.
Очевидно, что
![\begin{align*}
& \director( B \tto C ) = \{ \trm{(} , \trm{m} , \trm{n} \} ,\\
& \director( B \tto B \trm{/} C ) = \{ \trm{(} , \trm{m} , \trm{n} \} ,\\
& \director( B \tto B \trm{*} C ) = \{ \trm{(} , \trm{m} , \trm{n} \} .
\end{align*}](/sites/default/files/tex_cache/429ec421b36d9ae02f3049b02b8b59ca.png)
Пример 13.1.27. Пусть контекстно-свободная грамматика не содержит бесполезных символов.
Пусть даны
правило
и
символ
. Тогда утверждение
![b \in \director( A \tto \alpha )](/sites/default/files/tex_cache/259ef275cb8e2958813f3ef496d95654.png)
![x \in \Sigma^*](/sites/default/files/tex_cache/6de804f744037ae87730724ade279fbe.png)
![y \in \Sigma^*](/sites/default/files/tex_cache/ef23a990f8b076ec7d52ac0cf3bb168e.png)
![\theta \in \ns ^*](/sites/default/files/tex_cache/70b870524ec4ee39e7e843a5c561595b.png)
![S \overstar{\Rightarrow} x A \theta
\quad\text{и}\quad
x \alpha \theta \overstar{\Rightarrow} x b y .](/sites/default/files/tex_cache/7758bc62da48a081ad9db6cc48111784.png)
Теорема 13.1.28. Пусть дана
контекстно-свободная грамматика . Пусть
- соответствующая
контекстно-свободная
грамматика с маркером конца строки,
приведенная в определении 13.1.16. Обозначим через M МП-автомат
, где
![Q = \{ v \in \Sigma_\eos^* \mid | v | \leq 1 \} \cup \{ \qinitial \} ,](/sites/default/files/tex_cache/8f7bdb1ea6dfcd6bcb697e8a209d09cb.png)
![\qinitial \notin \Sigma_\eos^*](/sites/default/files/tex_cache/13ec7af1e52d66426c243e4beb788f32.png)
![\Gamma = N_\eos \cup \Sigma_\eos](/sites/default/files/tex_cache/7c7aba4074d9bfabd2b1a2560d6028dc.png)
![\begin{align*}
& \Delta =
\{ \lp \lp \qinitial , \varepsilon , \varepsilon \rp ,
\lp \varepsilon , S_\eos \rp \rp \} \cup {} \\
&\myqquad \cup
\{ \lp \lp \varepsilon , a , \varepsilon \rp ,
\lp a , \varepsilon \rp \rp \mid a \in \Sigma_\eos \} \cup {} \\
&\myqquad \cup
\{ \lp \lp a , \varepsilon , a \rp ,
\lp \varepsilon , \varepsilon \rp \rp \mid a \in \Sigma_\eos \} \cup {} \\
&\myqquad \cup
\{ \lp \lp b , \varepsilon , A \rp ,
\lp b , \alpha \rp \rp \mid
( A \tto \alpha ) \in P_\eos ,\ b \in \director_{ G_\eos }( A \tto \alpha ) \} .
\end{align*}](/sites/default/files/tex_cache/2e8a4cb738c75f67fe0e2356bf3da235.png)
Доказательство.
Индукцией по количеству тактов
можно доказать, что
если ,
где
,
то
.
Следовательно,
.
С другой стороны,
докажем, что если
в грамматике
выводится
и
,
где
,
,
,
,
то
.
Проведем доказательство индукцией по сумме
длины слова bw
и длины вывода .
Случай |bw| = 1,
образует базис индукции
(очевидно,
что
).
Проверим теперь шаг индукции.
Так как
и
,
то
.
Если
,
где
,
то вывод
имеет вид
![A \theta \lmarrow \alpha \theta \overstar{\lmarrow} b w ,](/sites/default/files/tex_cache/6129633395ca12164c4d18c58545eb2b.png)
![( A \tto \alpha ) \in P_\eos](/sites/default/files/tex_cache/aa08c4d44ced5fe66b4b53e652d7668e.png)
![b \in \director_{ G_\eos }( A \tto \alpha )](/sites/default/files/tex_cache/6a350d0db3241181d3adde3c7f49f527.png)
![\lp b , w , A \theta \rp \vdash \lp b , w , \alpha \theta \rp](/sites/default/files/tex_cache/6f52388b4fa176ac648e893986afd488.png)
![S_\eos \overstar{\lmarrow} u \alpha \theta](/sites/default/files/tex_cache/4222ce81c3b4b2478055fdf6ec8b536b.png)
![\alpha \theta \overstar{\lmarrow} b w](/sites/default/files/tex_cache/c7d346d530bc6871acb626f5a7bce290.png)
![\beta = a \beta'](/sites/default/files/tex_cache/6518cbb66172785a54db05f1d8d9bd13.png)
![a \in \Sigma_\eos](/sites/default/files/tex_cache/11d518e78305d73cea609dac5082cead.png)
![\beta' \overstar{\lmarrow} w](/sites/default/files/tex_cache/ecb2f880a9bf94d9c624adc0e8254f2e.png)
![w = \varepsilon](/sites/default/files/tex_cache/2363c3bd5544842ba33b848c42f3e173.png)
![b = \eos](/sites/default/files/tex_cache/05c1cded86e464af61c63fbe3ae004cd.png)
![\beta' = \varepsilon](/sites/default/files/tex_cache/ae4254ea9d9328c6e0ab47e79755082e.png)
![w \neq \varepsilon](/sites/default/files/tex_cache/0266bbf9f0f9c5987d7f810646be8010.png)
![b' \in \Sigma_\eos](/sites/default/files/tex_cache/6737becc8ca91dc20aee359e66b7938d.png)
![w' \in \Sigma_\eos^*](/sites/default/files/tex_cache/7cbcfb9686ff1a11cf61ab77431b3c3b.png)
![S_\eos \overstar{\lmarrow} u' \beta'](/sites/default/files/tex_cache/259ecf8aa0b082d2208361a69086a9da.png)
![\beta' \overstar{\lmarrow} b' w'](/sites/default/files/tex_cache/41e6d00a0916e7f5395e4356c61f19f4.png)
![\lp b' , w' , \beta' \rp \overstar{\vdash}
\lp \varepsilon , \varepsilon , \varepsilon \rp](/sites/default/files/tex_cache/1d8309620b6f599f0b7c2a57e5999fe3.png)
![\lp b , b' w' , b \beta' \rp \vdash
\lp \varepsilon , b' w' , \beta ' \rp \vdash
\lp b' , w' , \beta ' \rp .](/sites/default/files/tex_cache/eb8ae03e81ecd5fe8b80142821343122.png)
![L ( G_\eos ) \subseteq L ( M )](/sites/default/files/tex_cache/a75e4ad4fd853f66e04a3905d4c4cf52.png)
Гомоморфизм
задается соотношениями
![\begin{align*}
& r ( \lp \lp b , \varepsilon , A \rp , \lp b , \alpha \rp \rp ) =
( A \tto \beta ) ,\\
& r ( \mathfrak{d} ) = \varepsilon
\mathspace\text{для остальных}\mathspace \mathfrak{d} \in \Delta .
\end{align*}](/sites/default/files/tex_cache/f8050dc82a3bf32354a3c7e3e3ddf8b0.png)