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

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

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

Определение 13.1.14. Протоколом вычислительного процесса МП-Автомата M = \lalg Q , \Sigma , \Gamma , \Delta , I , F \ralg будем называть последовательность переходов, примененных в этом вычислительном процессе. Формально говоря, протоколом вычислительного процесса

\lp q_0 , w_0 , \alpha_0 \rp ,\
 \lp q_1 , w_1 , \alpha_1 \rp ,\ldots ,\
 \lp q_n , w_n , \alpha_n \rp
является последовательность переходов
\lp \lp q_0 , x_1 , \beta_1 \rp , \lp q_1 , \gamma_1 \rp \rp ,\ldots ,\
 \lp \lp q_{n-1} , x_n , \beta_n \rp , \lp q_n , \gamma_n \rp \rp ,
где для каждого i между 1 и n слово xi определяется равенством w_{i-1} = x_i w_i , а через \beta_i и \gamma_i обозначены кратчайшие слова из \Gamma^* , удовлетворяющие условиям
\begin{align*}
& \lp \lp q_{i-1} , x_i , \beta_i \rp , \lp q_i , \gamma_i \rp \rp
\in \Delta ,\\
& \alpha_{i-1} = \beta_i \zeta ,\\
& \alpha_i = \gamma_i \zeta
\end{align*}
для некоторого слова \zeta \in \Gamma ^* .

Пример 13.1.15. Протоколом вычислительного процесса из примера 13.1.10 является последовательность

\begin{multiline*}
\lp \lp 1 , b , \varepsilon \rp ,
\lp 2 , D \rp \rp ,\
\lp \lp 2 , a , \varepsilon \rp ,
\lp 1 , D \rp \rp ,\
\lp \lp 1 , b , \varepsilon \rp ,
\lp 2 , D \rp \rp ,\\
\lp \lp 2 , \varepsilon , D \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\lp \lp 2 , \varepsilon , D \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\lp \lp 2 , \varepsilon , D \rp ,
\lp 2 , \varepsilon \rp \rp .
\end{multiline*}

Определение 13.1.16. Для каждой контекстно-свободной грамматики G = \lalg N , \Sigma , P , S \ralg обозначим через G_\eos контекстно-свободную грамматику \lalg N \cup \{ S_\eos \} , \Sigma \cup \{ \eos \} ,
 P_\eos , S_\eos \ralg , где \eos и S_\eos - два различных новых символа, не принадлежащие множеству N \cup \Sigma , и P_\eos = P \cup \{ S_\eos \tto S \eos \} . Грамматику G_\eos будем называть грамматикой с маркером конца строки. Терминальный алфавит грамматики G_\eos (то есть множество \Sigma \cup \{ \eos \} ) будем обозначать через \Sigma_\eos . Нетерминальный алфавит N \cup \{ S_\eos \} будем обозначать через N_\eos .

Пример 13.1.17. Рассмотрим контекстно-свободную грамматику G с терминальным алфавитом \Sigma = \{ \trm{m} , \trm{n} , \trm{+} , \trm{-} , \trm{*} , \trm{/} ,
\trm{(} , \trm{)} , \eos \} , вспомогательным алфавитом N = {S,A,B,C} и правилами

\begin{align*}
A \; & {\to} \; A \trm{+} B , & B \; & {\to} \; B \trm{*} C , & C \; & {\to} \; \trm{(} A \trm{)} , \\
A \; & {\to} \; A \trm{-} B , & B \; & {\to} \; B \trm{/} C , & C \; & {\to} \; \trm{m} , \\
A \; & {\to} \; B           , & B \; & {\to} \; C           , & C \; & {\to} \; \trm{n} .
\end{align*}
Ей соответствует следующая грамматика G_\eos с маркером конца строки:
\begin{align*}
T \; & {\to} \; A \eos      , & B \; & {\to} \; B \trm{*} C , & C \; & {\to} \; \trm{(} A \trm{)} , \\
A \; & {\to} \; A \trm{+} B , & B \; & {\to} \; B \trm{/} C , & C \; & {\to} \; \trm{m} , \\
A \; & {\to} \; A \trm{-} B , & B \; & {\to} \; C           , & C \; & {\to} \; \trm{n} . \\
A \; & {\to} \; B ,
\end{align*}

Замечание 13.1.18. Очевидно, что L ( G_\eos ) = L ( G ) \cdot \{ \eos \} .

Лемма 13.1.19. Если \smash[b]{
 S_\eos \overstar{\myunderset{ G_\eos }{\Rightarrow }} \eta \eos \theta } , где \eta \in \ns ^* и \theta \in \ns ^* , то \theta = \varepsilon .

Доказательство. Очевидно, что если \smash[b]{
 S \eos \overstar{\myunderset{ G_\eos }{\Rightarrow }} \omega } , то слово \omega не содержит символа S_\eos .

Теперь докажем индукцией по длине вывода, что если S \eos \overstar{\myunderset{ G_\eos }{\Rightarrow }} \eta \eos \theta , то \theta = \varepsilon . Пусть на последнем шаге в этом выводе применялось правило ( A \tto \alpha ) \in P .

Если | \alpha |_\eos > 0 , то A = S_\eos , что невозможно (очевидно, что если S \eos \overstar{\myunderset{ G_\eos }{\Rightarrow }} \omega , то слово \omega не содержит символа S_\eos ).

Если | \alpha |_\eos = 0 , то рассмотрим два случая. При

S \eos
 \overstar{\myunderset{ G_\eos }{\Rightarrow }}
 \eta_1 A \eta_2 \eos \theta
 \myunderset{ G_\eos }{\Rightarrow }
 \eta_1 \alpha \eta_2 \eos \theta
равенство \theta = \varepsilon обеспечивается предположением индукцией. Случай
S \eos
 \overstar{\myunderset{ G_\eos }{\Rightarrow }}
 \eta \eos \theta_1 A \theta_2
 \myunderset{ G_\eos }{\Rightarrow }
 \eta \eos \theta_1 \alpha \theta_2
невозможен, так как предположение индукции дает \theta_1 A \theta_2  = \varepsilon .

Определение 13.1.20. Пусть даны контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg и МП-автомат M = \lalg Q , \Sigma , \Gamma , \Delta , I , F \ralg . Будем говорить, что МП-автомат M - нисходящий магазинный анализатор (или предсказывающий анализатор, top-down, left-to-right parser, predictive parser) для грамматики G, если L ( M ) = L ( G_\eos ) и существует такой гомоморфизм r \colon \Delta^* \to P_\eos^* , что для каждого вычислительного процесса (МП-автомата M ), допускающего слово w \in \Sigma_\eos^* , образ протокола этого вычислительного процесса при гомоморфизме r является протоколом некоторого левостороннего вывода слова w в грамматике G_\eos . (При задании гомоморфизма r конечные множества \Delta и P_\eos рассматриваются как два алфавита.)

Пример 13.1.21. Рассмотрим контекстно-свободную грамматику G_\eos из примера 13.1.17. Язык L ( G_\eos ) распознается недетерминированным МП-автоматом M = \lalg \{ 1 , 2 \} , \Sigma , \Gamma , \Delta ,
\{ 1 \} , \{ 2 \} \ralg , где

\Gamma = \{ A , B , C ,
 \trm{+} , \trm{-} , \trm{*} , \trm{/} , \trm{)} , \eos \}
и
\begin{align*}
{}
\Delta &= \{
\lp \lp 1 , \varepsilon , \varepsilon \rp ,
\lp 2 , A \eos \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \varepsilon , A \rp ,
\lp 2 , A \trm{+} B \rp \rp ,\
\lp \lp 2 , \varepsilon , A \rp ,
\lp 2 , A \trm{-} B \rp \rp ,\
\lp \lp 2 , \varepsilon , A \rp ,
\lp 2 , B \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \varepsilon , B \rp ,
\lp 2 , B \trm{*} C \rp \rp ,\
\lp \lp 2 , \varepsilon , B \rp ,
\lp 2 , B \trm{/} C \rp \rp ,\
\lp \lp 2 , \varepsilon , B \rp ,
\lp 2 , C \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{(} , C \rp ,
\lp 2 , A \trm{)} \rp \rp ,\
\lp \lp 2 , \trm{m} , C \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\lp \lp 2 , \trm{n} , C \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{+} , \trm{+} \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{-} , \trm{-} \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{*} , \trm{*} \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{/} , \trm{/} \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \trm{)} , \trm{)} \rp ,
\lp 2 , \varepsilon \rp \rp ,\
\\ &\hphantom{ {} = {} \{ } %\}
\lp \lp 2 , \eos , \eos \rp ,
\lp 2 , \varepsilon \rp \rp
\} .
\end{align*}
Легко убедиться, что МП-автомат M является нисходящим магазинным анализатором для грамматики G из примера 13.1.17.

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

Упражнение 2.1.25

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

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

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