Московский государственный университет имени М.В.Ломоносова
Опубликован: 09.07.2007 | Доступ: свободный | Студентов: 2487 / 1009 | Оценка: 4.56 / 4.26 | Длительность: 20:40:00
ISBN: 978-5-9556-0062-8
Специальности: Математик
Лекция 14:

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

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

Пример 13.1.29. Рассмотрим контекстно-свободную грамматику из примера 13.1.3. Грамматика с маркером конца строки имеет правила

\begin{align*}
T \; & {\to} \; S \eos , \\
S \; & {\to} \; c , \\
S \; & {\to} \; dS , \\
S \; & {\to} \; aSeSb .
\end{align}
Соответствующий нисходящий магазинный анализатор M, построенный в теореме 13.1.28, имеет приведенный ниже вид.
\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}
}

Определение 13.1.30. Контекстно-свободная грамматика G \peq \lalg N , \Sigma , P , S \ralg принадлежит классу LL(1), если для любых двух правил ( A \tto \alpha ) \in P_\eos и ( A \tto \beta ) \in P_\eos , где \alpha \neq \beta , множества \director_{ G_\eos }( A \tto \alpha ) и \director_{ G_\eos }( A \tto \beta ) не пересекаются.

Замечание 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. Пусть контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg не содержит бесполезных символов. Система множеств \first( \omega ) (где \omega \in
\ns ^* ) состоит из наименьших ( по включению ) множеств, удовлетворяющих следующим условиям:

  1. если \phi \overstar{\Rightarrow} \varepsilon , то b \in \first( \phi b \psi ) для всех b \in \Sigma и \psi \in \ns ^* ;
  2. если \phi \overstar{\Rightarrow} \varepsilon , то \first( A ) \subseteq \first( \phi A \psi ) для всех A \in N и \psi \in \ns ^* ;
  3. если ( A \tto \alpha ) \in P , то \first( \alpha ) \subseteq \first( A ) .

Теорема 13.1.36. Пусть контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg не содержит бесполезных символов. Система множеств \follow( A ) ( где A \in N ) состоит из наименьших ( по включению ) множеств, удовлетворяющих следующим условиям:

  1. если B \in N и ( A \tto \phi B \psi ) \in P , то \first( \psi ) \subseteq \follow( B ) ;
  2. если B \in N , ( A \tto \phi B \psi ) \in P и \psi \overstar{\Rightarrow} \varepsilon , то
    \follow( A ) \subseteq \follow( B ) .

Замечание 13.1.37. Теоремы 13.1.35 и 13.1.36 дают алгоритм проверки принадлежности контекстно-свободной грамматики G классу LL(1). Можно предположить, что грамматика G не содержит бесполезных символов (их можно устранить).

Сначала необходимо вычислить значения \first_{ G_\eos }( \omega ) параллельно для всех слов \omega , являющихся суффиксами правых частей правил грамматики G_\eos . Для этого постепенно пополняем множества \first_{ G_\eos }( \omega ) (начав с пустых множеств), используя условия, приведенные в теореме 13.1.35.

Затем необходимо вычислить значения \follow_{ G_\eos }( A ) параллельно для всех вспомогательных символов A. Для этого постепенно пополняем множества \follow_{ G_\eos }( A ) (начав с пустых множеств), используя условия, приведенные в теореме 13.1.35.

В заключение вычислим значения \director_{ G_\eos }( A \tto \alpha ) для всех правил A \tto \alpha , следуя определению функции \director , и проверим условия из определения 13.1.30.

Теорема 13.1.38. Пусть даны контекстно-свободная грамматика G = \lalg N , \Sigma , P , S \ralg и символ A \in N . Пусть

P = P_0 \cup \{
 A \tto A \alpha_1 ,
 \ldots ,
 A \tto A \alpha_n ,
 A \tto \beta_1 ,
 \ldots ,
 A \tto \beta_m \} ,
где множество P0 не содержит правил с левой частью A и ни одно из слов \beta_1 , \ldots , \beta_m не начинается с символа A. Тогда грамматика G эквивалентна контекстно-свободной грамматике G' = \lalg N \cup \{ A' \} , \Sigma , P' , S \ralg , где A' - новый символ, не принадлежащий множеству N \cup \Sigma , и
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
 \} .

Пример 13.1.39. Если к контекстно-свободной грамматике G_\eos из примера 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*}
После упрощения получаем грамматику G'' с правилами
\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*}
Язык L(G'') распознается детерминированным МП-автоматом M \peq \lalg Q , \Sigma , \Gamma , \Delta , I , F \ralg , где Q = \{ \qinitial , \varepsilon \} , \Gamma = \{ C , E , D , \trm{)} , \eos \} , I = \{ \qinitial \} , F = \{ \varepsilon \} и
\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*}
Можно доказать, что МП-автомат M является нисходящим магазинным анализатором для грамматики
\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*}

Пример 13.1.40. Пусть \Sigma = \{ \trm{m} , \trm{n} , \trm{-} , \trm{*} \} и N = \{ A , B , C \} . Рассмотрим контекстно-свободную грамматику 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*}
Грамматика с маркером конца строки имеет правила
\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*}
Соответствующий нисходящий магазинный анализатор M, построенный в теореме 13.1.28, имеет приведенный ниже вид.
\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}
}
Легко убедиться, что грамматика G принадлежит классу LL(1) и МП-автомат M является детерминированным.

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

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

Упражнение 13.1.42. Принадлежит ли грамматика

\begin{align*}
S \; & {\to} \; a , \\
S \; & {\to} \; bS , \\
S \; & {\to} \; cSS 
\end{align*}
классу LL(1)?

Упражнение 13.1.43. Принадлежит ли грамматика

\begin{align*}
S \; & {\to} \; a , \\
S \; & {\to} \; Sb , \\
S \; & {\to} \; SSc 
\end{align*}
классу LL(1)?

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

Упражнение 2.1.25

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

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