Упражнение 2.1.25 |
Синтаксический разбор
Пример 13.1.29. Рассмотрим контекстно-свободную грамматику из примера 13.1.3. Грамматика с маркером конца строки имеет правила
![\begin{align*}
T \; & {\to} \; S \eos , \\
S \; & {\to} \; c , \\
S \; & {\to} \; dS , \\
S \; & {\to} \; aSeSb .
\end{align}](/sites/default/files/tex_cache/00b8e6f806f5700d503e3321978bf86b.png)
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix @=11mm{
*=[o][F-]{a}
\ar "2,3" <0.6mm> ^{\varepsilon,a:\varepsilon}
\rloop{-1,0} ^{\varepsilon,T:S\boldsymbol{\$}}
\rloop{0,1} ^{\varepsilon,S:aSeSb}
&
& *=[o][F-]{b}
\ar "2,3" <0.6mm> ^{\varepsilon,b:\varepsilon}
&
& *=[o][F-]{c}
\ar "2,3" <0.6mm> ^{\varepsilon,c:\varepsilon}
\rloop{1,0} ^{\varepsilon,T:S\boldsymbol{\$}}
\rloop{0,1} ^{\varepsilon,S:c}
\\
*=[o][F-]{q_{\textrm{s}}}
\ar @`{+/l16mm/} [] ^{}
\ar "2,3" ^{\varepsilon,\varepsilon:T}
&
& *=[o][F=]{\varepsilon}
\ar "1,1" <0.6mm> ^{a,\varepsilon:\varepsilon}
\ar "1,3" <0.6mm> ^{b,\varepsilon:\varepsilon}
\ar "1,5" <0.6mm> ^{c,\varepsilon:\varepsilon}
\ar "3,5" <0.6mm> ^{d,\varepsilon:\varepsilon}
\ar "3,3" <0.6mm> ^{e,\varepsilon:\varepsilon}
\ar "3,1" <0.6mm> ^{\boldsymbol{\$},\varepsilon:\varepsilon}
&
&
\\
*=[o][F-]{\boldsymbol{\$}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{\$}:\varepsilon}
&
& *=[o][F-]{e}
\ar "2,3" <0.6mm> ^{\varepsilon,e:\varepsilon}
&
& *=[o][F-]{d}
\ar "2,3" <0.6mm> ^{\varepsilon,d:\varepsilon}
\rloop{1,0} ^{\varepsilon,T:S\boldsymbol{\$}}
\rloop{0,-1} ^{\varepsilon,S:dS}
}](/sites/default/files/tex_cache/541dcb79332ade51b77902d93f464b36.png)
Определение 13.1.30.
Контекстно-свободная грамматика
принадлежит классу LL(1),
если для любых двух правил
и
,
где
,
множества
и
не пересекаются.
Замечание 13.1.31. Первая буква L в названии класса LL(1) означает, что входное слово читается слева направо (left-to-right). Вторая буква L означает, что строится левосторонний вывод (leftmost derivation). Число 1 указывает на то, что на каждом шаге для принятия решения используется один символ неразобранной части входного слова.
Пример 13.1.32. Грамматика из примера 13.1.3 принадлежит классу LL(1), а грамматика из примера 3.1.17 этому классу не принадлежит.
Теорема 13.1.33. МП-автомат M, построенный в теореме 13.1.28 по контекстно-свободной грамматике G, является детерминированным тогда и только тогда, когда грамматика G принадлежит классу LL(1).
Теорема 13.1.34. Грамматики из класса LL(1) порождают только детерминированные контекстно-свободные языки.
Теорема 13.1.35. Пусть
контекстно-свободная грамматика не содержит бесполезных символов.
Система множеств
(где
) состоит из наименьших ( по включению ) множеств,
удовлетворяющих следующим условиям:
-
если
, то
для всех
и
;
-
если
, то
для всех
и
;
-
если
, то
.
Теорема 13.1.36. Пусть
контекстно-свободная грамматика не содержит бесполезных символов.
Система множеств
( где
) состоит из наименьших ( по включению ) множеств,
удовлетворяющих следующим условиям:
-
если
и
, то
;
-
если
,
и
, то
Замечание 13.1.37. Теоремы 13.1.35 и 13.1.36 дают алгоритм проверки принадлежности контекстно-свободной грамматики G классу LL(1). Можно предположить, что грамматика G не содержит бесполезных символов (их можно устранить).
Сначала необходимо вычислить значения
параллельно для всех слов
,
являющихся суффиксами правых частей правил грамматики
.
Для этого постепенно пополняем множества
(начав с пустых множеств),
используя условия, приведенные в теореме 13.1.35.
Затем необходимо вычислить значения
параллельно для всех
вспомогательных символов A.
Для этого постепенно пополняем множества
(начав с пустых множеств),
используя условия, приведенные в теореме 13.1.35.
В заключение вычислим значения
для всех правил
,
следуя определению функции
,
и проверим условия из определения 13.1.30.
Теорема 13.1.38.
Пусть даны
контекстно-свободная грамматика
и символ
.
Пусть
![P = P_0 \cup \{
A \tto A \alpha_1 ,
\ldots ,
A \tto A \alpha_n ,
A \tto \beta_1 ,
\ldots ,
A \tto \beta_m \} ,](/sites/default/files/tex_cache/03c3efede95b8f5dcf992b59b127ce3f.png)
![\beta_1 , \ldots , \beta_m](/sites/default/files/tex_cache/ca2da58c8281355c4ec7c24c6a664ea3.png)
![G' = \lalg N \cup \{ A' \} , \Sigma , P' , S \ralg](/sites/default/files/tex_cache/6336a0f9e12e50063805d6b59651e7bb.png)
![N \cup \Sigma](/sites/default/files/tex_cache/ab357818084464d7c6245dcb96d36f9d.png)
![P' = P_0 \cup \{
A \squeeze{\tto} \beta_1 A' ,
\ldots ,
A \squeeze{\tto} \beta_m A' ,
A' \squeeze{\tto} A' \alpha_1 ,
\ldots ,
A' \squeeze{\tto} A' \alpha_n ,
A' \squeeze{\tto} \varepsilon
\} .](/sites/default/files/tex_cache/5e55d8a226779331d8fa7137d01b5899.png)
Пример 13.1.39.
Если к контекстно-свободной грамматике
из примера 13.1.17
два раза применить преобразование из теоремы 13.1.38
(для вспомогательного символа A
и для вспомогательного символа B ),
то получим
эквивалентную грамматику G'
с правилами
![\begin{align*}
S \; & {\to} \; A \eos , & B \; & {\to} \; C D , & C \; & {\to} \; \trm{(} A \trm{)} , \\
A \; & {\to} \; B E , & D \; & {\to} \; \trm{*} C D , & C \; & {\to} \; \trm{m} , \\
E \; & {\to} \; \trm{+} B E , & D \; & {\to} \; \trm{/} C D , & C \; & {\to} \; \trm{n} . \\
E \; & {\to} \; \trm{-} B E , & D \; & {\to} \; \varepsilon , \\
E \; & {\to} \; \varepsilon ,
\end{align*}](/sites/default/files/tex_cache/6fb04f25d3acf356e55831719c91c4c8.png)
![\begin{align*}
S \; & {\to} \; A \eos , & D \; & {\to} \; \trm{*} C D , & C \; & {\to} \; \trm{(} C D E \trm{)} , \\
A \; & {\to} \; C D E , & D \; & {\to} \; \trm{/} C D , & C \; & {\to} \; \trm{m} , \\
E \; & {\to} \; \trm{+} C D E , & D \; & {\to} \; \varepsilon , & C \; & {\to} \; \trm{n} . \\
E \; & {\to} \; \trm{-} C D E , \\
E \; & {\to} \; \varepsilon ,
\end{align*}](/sites/default/files/tex_cache/0a62176f6de118979a895dbb4232008c.png)
![M \peq \lalg Q , \Sigma , \Gamma , \Delta , I , F \ralg](/sites/default/files/tex_cache/94898fcf9ac7041c76d66397a842ac7a.png)
![Q = \{ \qinitial , \varepsilon \}](/sites/default/files/tex_cache/185d709690a3727f06f99c0e6e7c8c9c.png)
![\Gamma = \{ C , E , D , \trm{)} , \eos \}](/sites/default/files/tex_cache/48c191038c72d102283aa9cf7df831fe.png)
![I = \{ \qinitial \}](/sites/default/files/tex_cache/3f27491d01f411c4dc99daba19557168.png)
![F = \{ \varepsilon \}](/sites/default/files/tex_cache/e0cac885d18415f5844dffdc56838f38.png)
![\begin{align*}
{}
\Delta&=\{
\lp\lp\qinitial,\varepsilon,\varepsilon\rp,
\lp\varepsilon,CDE\eos\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{*},D\rp,
\lp\varepsilon,CD\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{/},D\rp,
\lp\varepsilon,CD\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{+},DE\rp,
\lp\varepsilon,CDE\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{-},DE\rp,
\lp\varepsilon,CDE\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{)},DE\trm{)}\rp,
\lp\varepsilon,\varepsilon\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\eos,DE\eos\rp,
\lp\varepsilon,\varepsilon\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{m},C\rp,
\lp\varepsilon,\varepsilon\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{n},C\rp,
\lp\varepsilon,\varepsilon\rp\rp,\
\\&\hphantom{{}={}\{}%\}
\lp\lp\varepsilon,\trm{(},C\rp,
\lp\varepsilon,CDE\trm{)}\rp\rp
\}.
\end{align*}](/sites/default/files/tex_cache/aba5e2aec088a7eb3f51eabe83489e05.png)
![\begin{align*}
A \; & {\to} \; C D E , & D \; & {\to} \; \trm{*} C D , & C \; & {\to} \; \trm{(} C D E \trm{)} , \\
E \; & {\to} \; \trm{+} C D E , & D \; & {\to} \; \trm{/} C D , & C \; & {\to} \; \trm{m} , \\
E \; & {\to} \; \trm{-} C D E , & D \; & {\to} \; \varepsilon , & C \; & {\to} \; \trm{n} . \\
E \; & {\to} \; \varepsilon ,
\end{align*}](/sites/default/files/tex_cache/687e18ea9bf72cea14abed12e4ceb455.png)
Пример 13.1.40.
Пусть
и
.
Рассмотрим контекстно-свободную
грамматику G
с правилами
![\begin{align*}
A \; & {\to} \; C D E , & D \; & {\to} \; \trm{*} C D , \\
E \; & {\to} \; \trm{-} C D E , & D \; & {\to} \; \varepsilon , \\
E \; & {\to} \; \varepsilon , & C \; & {\to} \; \trm{m} , \\
& & C \; & {\to} \; \trm{n} .
\end{align*}](/sites/default/files/tex_cache/6dd221f144a4e0718fcfc6b8a4d1e7a3.png)
![\begin{align*}
T \; & {\to} \; A \eos , & D \; & {\to} \; \trm{*} C D , \\
A \; & {\to} \; C D E , & D \; & {\to} \; \varepsilon , \\
E \; & {\to} \; \trm{-} C D E , & C \; & {\to} \; \trm{m} , \\
E \; & {\to} \; \varepsilon , & C \; & {\to} \; \trm{n} .
\end{align*}](/sites/default/files/tex_cache/89fbfb3032c0d129c40fa6d1b70ff79d.png)
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix @=11mm{
*=[o][F-]{\boldsymbol{m}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{m}:\varepsilon}
\rloop{0,-1} ^{\varepsilon,T:A\boldsymbol{\$}}
\rloop{-1,0} ^{\varepsilon,A:CDE}
\rloop{0,1} ^{\varepsilon,C:\boldsymbol{m}}
&
& *=[o][F-]{q_{\textrm{s}}}
\ar @`{+/l16mm/} [] ^{}
\ar "2,3" ^{\varepsilon,\varepsilon:T}
&
& *=[o][F-]{\boldsymbol{\$}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{\$}:\varepsilon}
\rloop{1,0} ^{\varepsilon,D:\varepsilon}
\rloop{0,-1} ^{\varepsilon,E:\varepsilon}
\\
%
&
& *=[o][F=]{\varepsilon}
\ar "1,1" <0.6mm> ^{\boldsymbol{m},\varepsilon:\varepsilon}
\ar "3,1" <0.6mm> ^{\boldsymbol{n},\varepsilon:\varepsilon}
\ar "3,3" <0.6mm> ^{\boldsymbol{*},\varepsilon:\varepsilon}
\ar "3,5" <0.6mm> ^{\boldsymbol{-},\varepsilon:\varepsilon}
\ar "1,5" <0.6mm> ^{\boldsymbol{\$},\varepsilon:\varepsilon}
&
&
\\
*=[o][F-]{\boldsymbol{n}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{n}:\varepsilon}
\rloop{0,-1} ^{\varepsilon,T:A\boldsymbol{\$}}
\rloop{-1,0} ^{\varepsilon,A:CDE}
\rloop{0,1} ^{\varepsilon,C:\boldsymbol{n}}
&
& *=[o][F-]{\boldsymbol{*}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{*}:\varepsilon}
\rloop{0,-1} ^{\varepsilon,D:\boldsymbol{*}CD}
&
& *=[o][F-]{\boldsymbol{-}}
\ar "2,3" <0.6mm> ^{\varepsilon,\boldsymbol{-}:\varepsilon}
\rloop{1,0} ^{\varepsilon,D:\varepsilon}
\rloop{0,-1} ^{\varepsilon,E:\boldsymbol{-}CDE}
}](/sites/default/files/tex_cache/0fba10db6bf9c19bc0e7c26b3d3c6d94.png)
Упражнение 13.1.41. Существует ли детерминированный нисходящий магазинный анализатор для грамматики
![\begin{align*}
S \; & {\to} \; bScS , \\
S \; & {\to} \; bS , \\
S \; & {\to} \; a ?
\end{align*}](/sites/default/files/tex_cache/c7b382fa896981eddfa02712a7a3c6f1.png)
Упражнение 13.1.42. Принадлежит ли грамматика
![\begin{align*}
S \; & {\to} \; a , \\
S \; & {\to} \; bS , \\
S \; & {\to} \; cSS
\end{align*}](/sites/default/files/tex_cache/04347c90c67ec2ca2e45cf34c315181c.png)
Упражнение 13.1.43. Принадлежит ли грамматика
![\begin{align*}
S \; & {\to} \; a , \\
S \; & {\to} \; Sb , \\
S \; & {\to} \; SSc
\end{align*}](/sites/default/files/tex_cache/5f8d240938e1eba878acf27ca37a8356.png)