Помогите решить задание лекции 3 курс Математическая теория формальных языков |
Синтаксический разбор
В этой лекции даются формальные определения,
связанные с прямыми
(то есть читающими входную строку слева направо)
синтаксическими анализаторами.
В первом разделе доказывается, что для языков
из класса LL(1) можно построить
основанный на детерминированном автомате
с магазинной памятью
анализатор,
который создает
дерево разбора,
двигаясь снизу вверх, то есть от листьев к корню
(в теории контекстно-свободных грамматик
принято изображать деревья с корнем наверху).
Во втором разделе формулируется аналогичный результат
об анализе сверху вниз
для грамматик из класса .
При этом понятие анализа снизу вверх формализовано
в терминах последовательности правил, примененных
в левостороннем выводе,
а понятие анализа сверху вниз -
в терминах обращенной последовательности правил, примененных
в правостороннем выводе.
13.1. Нисходящий разбор
Определение 13.1.1. Процесс нахождения дерева вывода слова w в заданной контекстно-свободной грамматике называется синтаксическим разбором или синтаксическим анализом (parsing).
Определение 13.1.2. Протоколом
левостороннего вывода в контекстно-свободной грамматике
будем называть последовательность правил,
примененных в этом выводе.
Формально говоря,
протоколом левостороннего вывода
![\omega_0 , \omega_1 , \ldots , \omega_n](/sites/default/files/tex_cache/188216fbf2c50d5b422b4a2a840f3098.png)
![( A_1 \tto \alpha_1 ) , \ldots , ( A_n \tto \alpha_n ) ,](/sites/default/files/tex_cache/855ee4707c893227d355a42d327bda9c.png)
![\omega_i = u B \theta](/sites/default/files/tex_cache/e37773b9e4fc184016f740b35b91bd8a.png)
![\omega_{i+1} = u \beta \theta](/sites/default/files/tex_cache/a1ddb26dc82b29522f5fb9c6b8a3930d.png)
![u \in \Sigma^*](/sites/default/files/tex_cache/905a6e6c23ce51f93c1b027a87f62889.png)
![B \in N](/sites/default/files/tex_cache/123c4aad7ed47fd912a868e167546e26.png)
![\theta \in \ns ^*](/sites/default/files/tex_cache/70b870524ec4ee39e7e843a5c561595b.png)
![\beta \in \ns ^*](/sites/default/files/tex_cache/c4d2a31677163d8baeca8792dab13253.png)
![\alpha_{i+1} = \beta](/sites/default/files/tex_cache/64dd8d6abffd2f32f09518040ae18f64.png)
Пример 13.1.3. Рассмотрим контекстно-свободную грамматику
![\begin{align*}
S \; & {\to} \; c , \\
S \; & {\to} \; dS , \\
S \; & {\to} \; aSeSb .
\end{align*}](/sites/default/files/tex_cache/171f75067e0bdcebf2727f768bd98b4a.png)
![\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
}](/sites/default/files/tex_cache/cb4985ced830d8fbadae5d6e430cbbf8.png)
![S \pRightarrow
aSeSb \pRightarrow
aceSb \pRightarrow
acedSb \pRightarrow
acedcb .](/sites/default/files/tex_cache/2ff4a26746d84231c89a293ce66bdf2e.png)
![( S \to aSeSb ) ,\
( S \to c ) ,\
( S \to dS ) ,\
( S \to c ) .](/sites/default/files/tex_cache/d3cb6c212b039cc95c0da081a2ce3f11.png)
Лемма 13.1.4. Разным левосторонним выводам в одной и той же контекстно-свободной грамматике соответствуют разные протоколы.
Замечание 13.1.5. Протокол левостороннего вывода в контекстно-свободной грамматике является естественным описанием соответствующего дерева вывода в порядке префиксного обхода (preorder traversal). (При префиксном обходе упорядоченного дерева первым посещается корень этого дерева, затем выполняется префиксный обход первого непосредственного потомка корня, затем второго и т. д.)
Например, протокол левостороннего вывода из примера 13.1.3 задает процесс постепенного конструирования дерева вывода, изображенный ниже.
![\newcommand{\rb}[1]{\raisebox{0pt}[8pt]{$#1$}}
\entrymodifiers={=<3.3mm>[o]}
\xymatrix@=0mm{
&&&&&\boldsymbol{S}
\\
\\
\\
\\
&&&&&S\ar[ddddddlllll]<-1mm>\ar[ddl]\ar[ddddddl]\ar[ddr]\ar[ddddddrrrrr]<1mm>\\
\\
&&&&\boldsymbol{S}&&\boldsymbol{S}\\
\\
\\
\\
\rb{a}&&&&\rb{\boldsymbol{e}}&&&&&&\rb{\boldsymbol{b}}
\\
\\
&&&&&S\ar[ddddddlllll]<-1mm>\ar[ddl]\ar[ddddddl]\ar[ddr]\ar[ddddddrrrrr]<1mm>\\
\\
&&&&S\ar[ddddll]&&\boldsymbol{S}\\
\\
\\
\\
\rb{a}&&\rb{c}&&\rb{e}&&&&&&\rb{\boldsymbol{b}}
\\
\\
&&&&&S\ar[ddddddlllll]<-1mm>\ar[ddl]\ar[ddddddl]\ar[ddr]\ar[ddddddrrrrr]<1mm>\\
\\
&&&&S\ar[ddddll]&&S\ar[dddd]\ar[ddr]\\
\\
&&&&&&&\boldsymbol{S}\\
\\
\rb{a}&&\rb{c}&&\rb{e}&&\rb{d}&&&&\rb{\boldsymbol{b}}
\\
\\
&&&&&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}
}](/sites/default/files/tex_cache/1456bb018af76b67230a0a44aa4b310e.png)
Определение 13.1.6. Левым разбором (left parse) слова w в контекстно-свободной грамматике G называется протокол любого левостороннего вывода слова w в грамматике G.
Пример 13.1.7. Левым разбором слова
aceaacecbecbb
в грамматике из примера 13.1.3 является последовательность
![\begin{multiline*}
( S \tto aSeSb ) ,\
( S \tto c ) ,\
( S \tto aSeSb ) ,\\
( S \tto aSeSb ) ,\
( S \tto c ) ,\
( S \tto c ) ,\
( S \tto c ) .
\end{multiline*}](/sites/default/files/tex_cache/0ded9fc4a7bf589bf8a0c03b95437e58.png)
Определение 13.1.8. Процесс нахождения левого разбора слова w в заданной контекстно-свободной грамматике G называется нисходящим разбором (top-down parsing).
Определение 13.1.9. Вычислительным процессом МП-автомата M будем называть конечную последовательность его конфигураций, каждая из которых (кроме первой) получается из предыдущей одним тактом работы автомата M.
Пример 13.1.10. Рассмотрим МП-автомат
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix @=11mm{
*=[o][F-]{1}
\ar @`{+/l16mm/} [] ^{}
\rloop{0,1} ^{ab,\varepsilon:E}
\rloop{0,-1} ^{aa,E:\varepsilon}
\ar "1,2" <0.6mm> ^{b,\varepsilon:D}
& *=[o][F=]{2}
\ar "1,1" <0.6mm> ^{a,\varepsilon:D}
\rloop{0,1} ^{\varepsilon,D:\varepsilon}
\rloop{0,-1} ^{b,E:\varepsilon}
}](/sites/default/files/tex_cache/e69036021e3ea3c488962160adcc730f.png)
![\begin{multiline*}
\lp 1 , bab , \varepsilon \rp ,\
\lp 2 , ab , D \rp ,\
\lp 1 , b , DD \rp ,\
\lp 2 , \varepsilon , DDD \rp ,\\
\lp 2 , \varepsilon , DD \rp ,\
\lp 2 , \varepsilon , D \rp ,\
\lp 2 , \varepsilon , \varepsilon \rp
\end{multiline*}](/sites/default/files/tex_cache/c0eb35587091c2f00ed903497a46704c.png)
Определение 13.1.11.
Если в некотором вычислительном процессе
МП-автомата
первая конфигурация имеет вид
,
где
и
,
а последняя конфигурация имеет вид
,
где
,
то
будем говорить, что
этот вычислительный процесс допускает
слово w.
Пример 13.1.12. Вычислительный процесс из примера 13.1.10 допускает слово bab.
Замечание 13.1.13.
МП-автомат M
допускает слово
тогда и только тогда, когда
некоторый вычислительный процесс
МП-автомата M
допускает слово w.