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

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

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

13.2. Восходящий разбор

Определение 13.2.1. Протоколом правостороннего вывода в контекстно-свободной грамматике G = \lalg N , \Sigma , P , S \ralg будем называть обращенную последовательность правил, примененных в этом выводе. Формально говоря, протоколом правостороннего вывода

\omega_0 , \omega_1 , \ldots , \omega_n
является последовательность
( A_1 \tto \alpha_1 ) , \ldots , ( A_n \tto \alpha_n ) ,
где для каждого i<n, если \omega_i = \eta B v и \omega_{i+1} = \eta \beta v для некоторых \eta \in \ns ^* , B \in N , v \in \Sigma^* , \beta \in \ns ^* , то An-i = B и \alpha_{n-i} = \beta .

Пример 13.2.2. Рассмотрим контекстно-свободную грамматику

\begin{align*}
S \; & {\to} \; c\\
S \; & {\to} \; dS\\ 
S \; & {\to} \; aSeSb 
\end{align*}
и дерево вывода
\xymatrix @=6pt {
& & & & S\ar[ddllll]\ar[ddll]\ar[dd]\ar[ddrr]\ar[ddrrrr] \\
\\
a & & S\ar[dd] & & e & & S\ar[ddl]\ar[ddr] & & b \\
\\
& & c & & & d & & S\ar[dd] \\
\\
& & & & & & & c
}
из примера 13.1.3. Этому дереву вывода соответствует правосторонний вывод
S \pRightarrow
 aSeSb \pRightarrow
 aSedSb \pRightarrow
 aSedcb \pRightarrow
 acedcb .
Протоколом этого вывода является последовательность
( S \tto c ) ,\
 ( S \tto c ) ,\
 ( S \tto dS ) ,\
 ( S \tto aSeSb ) .

Лемма 13.2.3. Разным правосторонним выводам в одной и той же контекстно-свободной грамматике соответствуют разные протоколы.

Протокол правостороннего вывода в контекстно-свободной грамматике является естественным описанием соответствующего дерева вывода в порядке постфиксного обхода (postorder traversal). (Постфиксный обход упорядоченного дерева можно определить рекурсивно так: сначала выполняется постфиксный обход первого непосредственного потомка корня, затем второго и т. д., а в самом конце посещается корень дерева.)

Например, протокол правостороннего вывода из примера 13.2.2 задает процесс постепенного конструирования дерева вывода, изображенный ниже.

\newcommand{\rb}[1]{\raisebox{0pt}[8pt]{$ #1 $}}
\entrymodifiers={=<3.3mm>[o]}
\xymatrix @=0mm {
& & & & \boldsymbol{S}\ar[ddddll] \\
\\
\\
\\
\rb{\boldsymbol{a}} & & \rb{c}
\\%}
\\
%&\xymatrix @=0mm {
& & & & \boldsymbol{S}\ar[ddddll] \\
\\
& & & & & & & \boldsymbol{S}\ar[ddr] \\
\\
\rb{\boldsymbol{a}} & & \rb{c} & & \rb{\boldsymbol{e}} & & \rb{\boldsymbol{d}} & & \rb{c}
\\%}
\\
%&\xymatrix @=0mm {
& & & & \boldsymbol{S}\ar[ddddll] & & \boldsymbol{S}\ar[dddd]\ar[ddr] \\
\\
& & & & & & & S\ar[ddr] \\
\\
\rb{\boldsymbol{a}} & & \rb{c} & & \rb{\boldsymbol{e}} & & \rb{d} & & \rb{c}
\\%}
\\
%&\xymatrix @=0mm {
& & & & & \boldsymbol{S}\ar[ddddddlllll]<-1mm>\ar[ddl]\ar[ddddddl]\ar[ddr]\ar[ddddddrrrrr]<1mm> \\
\\
& & & & S\ar[ddddll] & & S\ar[dddd]\ar[ddr] \\
\\
& & & & & & & S\ar[ddr] \\
\\
\rb{a} & & \rb{c} & & \rb{e} & & \rb{d} & & \rb{c} & & \rb{b}
}

Определение 13.2.5. Правым разбором (right parse) слова w в контекстно-свободной грамматике G называется протокол любого правостороннего вывода слова w в грамматике G.

Пример 13.2.6. Правым разбором слова aceaacecbecbb в грамматике из примера 13.2.2 является последовательность

\begin{multiline*}
 ( S \tto c ) ,\
 ( S \tto c ) ,\
 ( S \tto c ) ,\
 ( S \tto aSeSb ) ,\\
 ( S \tto c ) ,\
 ( S \tto aSeSb ) ,\
 ( S \tto aSeSb ) .
\end{multiline*}

Определение 13.2.7. Процесс нахождения правого разбора слова w в~заданной контекстно-свободной грамматике G называется восходящим разбором (bottom-up parsing).

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

Пример 13.2.9. Рассмотрим контекстно-свободную грамматику 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{(} \}
и
\begin{align*}
{}
\Delta&=\{
\lp\lp1,\trm{+},\varepsilon\rp,
\lp1,\trm{+}\rp\rp,\
\lp\lp1,\trm{-},\varepsilon\rp,
\lp1,\trm{-}\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\trm{*},\varepsilon\rp,
\lp1,\trm{*}\rp\rp,\
\lp\lp1,\trm{/},\varepsilon\rp,
\lp1,\trm{/}\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\trm{(},\varepsilon\rp,
\lp1,\trm{(}\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\varepsilon,B\trm{+}A\rp,
\lp1,A\rp\rp,\
\lp\lp1,\varepsilon,B\trm{-}A\rp,
\lp1,A\rp\rp,\
\lp\lp1,\varepsilon,B\rp,
\lp1,A\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\varepsilon,C\trm{*}B\rp,
\lp1,B\rp\rp,\
\lp\lp1,\varepsilon,C\trm{/}B\rp,
\lp1,B\rp\rp,\
\lp\lp1,\varepsilon,C\rp,
\lp1,B\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\trm{)},A\trm{(}\rp,
\lp1,C\rp\rp,\
\lp\lp1,\trm{m},\varepsilon\rp,
\lp1,C\rp\rp,\
\lp\lp1,\trm{n},\varepsilon\rp,
\lp1,C\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp1,\eos,A\rp,
\lp2,\varepsilon\rp\rp
\}.
\end{align*}
Можно проверить, что МП-автомат M является восходящим магазинным анализатором для грамматики G из примера 13.1.17.

Определение 13.2.10. Контекстно-свободная грамматика G \peq \lalg N , \Sigma , P , S \ralg принадлежит классу LR(1), если для любых \eta_1 \in ( N_\eos \cup \Sigma_\eos )^* , \eta_2 \in ( N_\eos \cup \Sigma_\eos )^* , A_1 \in N_\eos \cup \Sigma_\eos , A_2 \in N_\eos \cup \Sigma_\eos , b \in \Sigma_\eos , v_1 \in \Sigma_\eos^* , v_2 \in \Sigma_\eos^* , \alpha_1 \in ( N_\eos \cup \Sigma_\eos )^* , \alpha_2 \in ( N_\eos \cup \Sigma_\eos )^* из условий

\begin{align*}
& S_\eos \overstar{\rmarrow} \eta_1 A_1 b v_1 ,\\
& S_\eos \overstar{\rmarrow} \eta_2 A_2 b v_2 ,\\
& ( A_1 \tto \alpha_1 ) \in P_\eos ,\\
& ( A_2 \tto \alpha_2 ) \in P_\eos ,\\
& \eta_1 \alpha_1 = \eta_2 \alpha_2
\end{align*}
следует, что A1 = A2 и \alpha_1 = \alpha_2 .

Замечание 13.2.11. Классу LR(1) принадлежат те языки, для которых возможен восходящий разбор слова при чтении слева направо с заглядыванием на один символ вперед.

Замечание 13.2.12. Буква L в названии класса LR(1) означает, что входное слово читается слева направо (left-to-right). Буква R означает, что строится правосторонний вывод (rightmost derivation). Число 1 указывает на то, что на каждом шаге для принятия решения используется один символ неразобранной части входного слова.

Теорема 13.2.13. Для каждой грамматики из класса LR(1) существует детерминированный восходящий магазинный анализатор.

Доказательство можно найти в [2, с. 420-447].

Теорема 13.2.14. Грамматики из класса LR(1) порождают только детерминированные контекстно-свободные языки.

Теорема 13.2.15. Каждая грамматика из класса LL(1) принадлежит также классу LR(1).

Упражнение 13.2.16. Найти все правые разборы слова bbacba в грамматике

\begin{align*}
 S \; & {\to} \; bScS , \\
 S \; & {\to} \; bS , \\
 S \; & {\to} \; a .
\end{align*}

Упражнение 13.2.17. Найти детерминированный восходящий магазинный анализатор для грамматики

\begin{align*}
 S \; & {\to} \; a , \\
 S \; & {\to} \; Sb , \\
 S \; & {\to} \; SSc .
\end{align*}

Упражнение 13.2.18. Найти детерминированный восходящий магазинный анализатор для грамматики

\begin{align*}
 S \; & {\to} \; a , \\
 S \; & {\to} \; bS , \\
 S \; & {\to} \; cSS .
\end{align*}

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

Упражнение 2.1.25

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

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

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