Опубликован: 09.07.2007 | Уровень: профессионал | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 14:

Синтаксический разбор

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >

Определение 13.1.22. Сентенциальной формой (sentential form) грамматики G = \lalg N , \Sigma , P , S \ralg называется любое слово в алфавите N \cup \Sigma , выводимое из начального символа S.

Пример 13.1.23. Слова S, aSeaceSbb, aceaacecbecbb являются сентенциальными формами грамматики из примера 13.1.3.

Определение 13.1.24. Пусть дана контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg . Определим три функции \first_G , \follow_G и \director_G , связанные с грамматикой G. Для краткости будем писать просто FIRST, FOLLOW и DIRECTOR.

Функция FIRST ставит в соответствие каждому слову \omega \pin \ns ^* множество тех терминальных символов, с которых начинаются слова, выводимые из \omega , то есть

\first( \omega ) \bydef \{ b \in \Sigma \mid
 ( \exists \theta \in \ns ^* ) \,
 \omega \overstar{\Rightarrow} b \theta \} .

Функция 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 \} .

Функция DIRECTOR ставит в соответствие каждому правилу ( A \tto \alpha ) \in P множество терминальных символов, определяемое следующим образом: если \alpha \overstar{\Rightarrow} \varepsilon , то

\director( A \tto \alpha ) \bydef \first( \alpha ) \cup \follow( A ) ,
иначе
\director( A \tto \alpha ) \bydef \first( \alpha ) .

Пример 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*}

Пример 13.1.26. Рассмотрим контекстно-свободную грамматику G_\eos из примера 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*}

Пример 13.1.27. Пусть контекстно-свободная грамматика G \peq \lalg N , \Sigma , P , S \ralg не содержит бесполезных символов. Пусть даны правило ( A \tto \alpha ) \in P и символ b \in \Sigma . Тогда утверждение

b \in \director( A \tto \alpha )
равносильно тому, что найдутся такие x \in \Sigma^* , y \in \Sigma^* и \theta \in \ns ^* , что
S \overstar{\Rightarrow} x A \theta
 \quad\text{и}\quad
 x \alpha \theta \overstar{\Rightarrow} x b y .

Теорема 13.1.28. Пусть дана контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg . Пусть G_\eos = \lalg N_\eos , \Sigma_\eos , P_\eos , S_\eos \ralg - соответствующая контекстно-свободная грамматика с маркером конца строки, приведенная в определении 13.1.16. Обозначим через M МП-автомат \lalg Q , \Sigma_\eos , \Gamma , \Delta ,
 \{ \qinitial \} , \{ \varepsilon \} \ralg , где

Q = \{ v \in \Sigma_\eos^* \mid | v | \leq 1 \} \cup \{ \qinitial \} ,
\qinitial \notin \Sigma_\eos^* , \Gamma = N_\eos \cup \Sigma_\eos и
\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*}
Тогда МП-автомат M является нисходящим магазинным анализатором для грамматики G.

Доказательство. Индукцией по количеству тактов можно доказать, что если \lp v , w , \beta \rp \overstar{\vdash}
 \lp \varepsilon , \varepsilon , \varepsilon \rp , где v \in \Sigma_\eos^* , то \smash[b]{ \beta \overstar{\myunderset{ G_\eos }{\Rightarrow }} v w } . Следовательно, L ( M ) \subseteq L ( G_\eos ) .

С другой стороны, докажем, что если в грамматике G_\eos выводится S_\eos \overstar{\lmarrow} u \beta и \beta \overstar{\lmarrow} b w , где u \in \Sigma_\eos^* , \beta \in \ns ^* , b \in \Sigma_\eos , w \in \Sigma_\eos^* , то \lp b , w , \beta \rp \overstar{\vdash}
 \lp \varepsilon , \varepsilon , \varepsilon \rp .

Проведем доказательство индукцией по сумме длины слова bw и длины вывода \beta \overstar{\lmarrow} b w . Случай |bw| = 1, \beta = b w образует базис индукции (очевидно, что \lp b , \varepsilon , b \rp \overstar{\vdash}
 \lp \varepsilon , \varepsilon , \varepsilon \rp ). Проверим теперь шаг индукции. Так как \beta \overstar{\Rightarrow} b w и b w \neq \varepsilon , то \beta \neq \varepsilon . Если \beta = A \theta , где A \in N , то вывод \beta \overstar{\lmarrow} b w имеет вид

A \theta \lmarrow \alpha \theta \overstar{\lmarrow} b w ,
где ( A \tto \alpha ) \in P_\eos и в силу леммы 13.1.27 b \in \director_{ G_\eos }( A \tto \alpha ) . Отсюда получаем, что \lp b , w , A \theta \rp \vdash \lp b , w , \alpha \theta \rp , и остается применить предположение индукции для левосторонних выводов S_\eos \overstar{\lmarrow} u \alpha \theta и \alpha \theta \overstar{\lmarrow} b w . Если же \beta = a \beta' , где a \in \Sigma_\eos , то, очевидно, a = b и \beta' \overstar{\lmarrow} w . Если w = \varepsilon , то b = \eos и в силу леммы 13.1.19 \beta' = \varepsilon , но этот случай уже рассмотрен в базисе индукции. Пусть w \neq \varepsilon . Тогда w = b'w' для некоторых b' \in \Sigma_\eos и w' \in \Sigma_\eos^* . Обозначим u' = ub. Применяя предположение индукции для левосторонних выводов S_\eos \overstar{\lmarrow} u' \beta' и \beta' \overstar{\lmarrow} b' w' , получаем \lp b' , w' , \beta' \rp \overstar{\vdash}
 \lp \varepsilon , \varepsilon , \varepsilon \rp . Согласно построению МП-автомата M имеем
\lp b , b' w' , b \beta' \rp \vdash
 \lp \varepsilon , b' w' , \beta ' \rp \vdash
 \lp b' , w' , \beta ' \rp .
Шаг индукции доказан. Теперь легко проверить, что выполняется L ( G_\eos ) \subseteq L ( M ) .

Гомоморфизм r \colon \Delta^* \to P_\eos^* задается соотношениями

\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*}

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Юлия Маковецкая
Юлия Маковецкая

Упражнение 2.1.25

Евгения Гунченко
Евгения Гунченко

Сдавала тест экстерном, результат получен 74 после принятия данного результата и соответственно оплаты курса, будет ли выдано удостоверение о повышении квалификации?

Виктор Мерзляков
Виктор Мерзляков
Россия, Краснодар, Кубгту
Дмитрий Заболотнов
Дмитрий Заболотнов
Россия, Краснодар