- Лекция 3
Лекция 3
Приведенные грамматики
Df Грамматика $G$ эквивалентна грамматике $G’$: $G \overset{L}{=} G’$
Дальше все для некоторой грамматики $G = (\Sigma, \Gamma, P, S)$, так же будем обозначать $G.\Gamma$ — множество нетерминалов грамматики $G$ — как свойство в каком-нибудь ЯП
Df $A \in \Gamma$ — производящий
$\exists w \in \Sigma^* : A \overset{*}{\implies} w$
Df $A \in \Gamma$ — достижимый
$\exists \alpha, \beta \in (\Sigma \cup \Gamma)^* \ : A \overset{*}{\implies} \alpha A \beta$
Далее $\alpha$ и $\beta$ всегда такие же.
Нас интересуют такие грамматики, в которых меньше всего мусора, где нет недостижимых и не производящих символов.
Пусть $\Gamma_p$ — множество производящих символов (от producing), а $\Gamma_r$ — множество достижимых символов (от reachable).
Df $G$ — приведенная
Пример множеств достижимых и производящих символов
Пусть $G$ задается так:
тогда:
Пример такой, что множества почти совпадают, но это не говорит о связи между производящими символами и достижимыми. Например $T$ — производящий, но недостижимый, а $K$ — достижимый и не производящий (хоть правило явно мусорное, которое его задает).
Обозначим $G \in \textrm{CFG}$ как $G$ — КСГ, мол $\textrm{CFU}$ — множество всех КСГ.
Th $\forall G \in \textrm{CFG} \, \, \exists G’$ — приведенная грамматика, такая что $G \overset{L}{=} G’$ (1)
Для доказательства приведем два алгоритма:
Al Построение $\Gamma_p$
- пока $\Gamma_p$ не стабильно:
стабильно — больше не меняется.
Простыми словами — добавляем к $\Gamma_p$ символы, из которых выводятся слова, в которых есть символы из $\Gamma_p$.
Al Построение $\Gamma_r$
- пока $\Gamma_r$ не стабильно:
Опять простыми словами — нужно брать те символы, которые выводимы из некоторого элемента $\Gamma_r$.
Al Построение приведенной грамматики $\widehat{G}$
- Найти $\Gamma_p$
- , то , иначе ,
где- Найти $(\Gamma_p)_r$
- ,
где
Pf Корректность алгоритма
Доказав корректность алгоритма, мы докажем и теорему (1) по построению, мол “Просто используйте алгоритм”.
TODO Тут было много слов и махания руками, но они утеряны, нужно прояснить и написать доказательство. TODO
Порядок поиска множеств $\Gamma_p$ и $\Gamma_r$ важен: в таком порядке делать $(\Gamma_r)_p$ будет неверно!
Пример применения алгоритмов поиска $\Gamma_p$ и $\Gamma_r$
-
Как видно, такая грамматика не эквивалентна данной, значит в таком порядке применять не нужно.
-
$\lambda$-свободные грамматики
Df Грамматика $G$ — $\lambda$-свободная
Обозначим как $G \in \textrm{CFG}_{\lambda}$
Либо $\forall p \in G.P \,:\, p \neq (A \rightarrow \lambda)$,
либо $(S \rightarrow \lambda) \in G.P$ и $\forall p \in G.P \,:\, \left[\,p = (A \rightarrow \alpha), \, S \notin \alpha\right]$
То есть в грамматике нет символов, из которых напрямую выводится пустое слово, хотя для аксиомы такое разрешается при условии, что нет правил, в правой части которых встречается аксиома.
Df Множество аннулирующих символов КСГ $G$
$Ann(G) = \left{A \in \Gamma\,\vert\, A \overset{*}{\underset{G}{\implies}} \lambda\right}$
Пример поиска $Ann(G)$
Первыми берем очевидные символы из которых напрямую выводится пустой символ — $A$ и $C$. Потом те, из которых выводятся слова, содержащие символы,выбранные раньше, и не содержащие терминалы — $B$, $E$ и $S$.
$D \rightarrow bE \vert c$ не позволяет нам добавить $D$ к $Ann(G)$, так как из $D$ обязательно выведется какой-то непустой символ — $b$ или $c$, хотя из $E$ и выводится пустой символ.
Th $\forall G \in \textrm{CFU} \, \, \exists \, G’ \in \textrm{CFU}_\lambda$ (2)
Для доказательства введем отношение $\llless$ на $(G.\Gamma \cup G.\Sigma)^*$ для некоторой $G \in \textrm{CFG}$:
Al Построение $\lambda$-свободной грамматики $G’$ из $G$
- Найти $Ann(G)$
- ,
где- если $\lambda \in L(G)$, то
Последний шаг обеспечивает сохранение пустого слова в построенном языке тем, что добавляет новую аксиому к нему и правила перехода из нее в старую.
Pf (2)
Опять говорим, что теорема доказывается применением алгоритма, докажем корректность алгоритма — докажем теорему.
Проверим, что $L(G) = L(\widehat{G})$: возьмем $w \in L(\widehat{G}), \, w \neq \lambda$.
$S \overset{*}{\underset{\widehat{G}}{\implies}} w$
на каждом шаге машем руками и все получается…
TODO доказательство упущено, нужно его дописать TODO
Пример построения $\lambda$-свободной грамматики
$G$:
$\widehat{G}$: