Опубликован: 06.08.2007 | Доступ: свободный | Студентов: 1562 / 741 | Оценка: 4.45 / 4.29 | Длительность: 18:50:00
Специальности: Программист
Лекция 5:

Синтаксический анализ

Теорема 4.3. Пусть M = (Q, T,  \Gamma , D, q_{0}, Z_{0}, F) - расширенный МП-автомат. Тогда существует МП- автомат M' , такой, что L(M') = L(M).

Расширенный МП-автомат M = (Q, T, \Gamma , D, q_{0}, Z_{0}, F) называется детерминированным, если выполнены следующие условия:

(1) Множество D(q, a, u) содержит не более одного элемента для любых q \in Q, a \in T \cup \{e\}, u \in  \Gamma^*,

(2) Если D(q, a, u) \ne  \varnothing , D(q, a, v) \ne  \varnothing и u \ne  v, то не существует цепочки x такой, что u = vx или v = ux,

(3) Если D(q, a, u) \ne  \varnothing , D(q, e, v) \ne  \varnothing, то не существует цепочки x такой, что u = vx или v = ux.

Теорема 4.4. Пусть M = (Q, T, \Gamma , D, q_{0}, Z_{0}, F) - расширенный ДМП-автомат. Тогда существует ДМП- автомат M' , такой, что L(M') = L(M).

ДМП-автомат и расширенный ДМП-автомат лежат в основе рассматриваемых далее в этой главе, соответственно, LL- и LR-анализаторов.

Определение. Говорят, что КС-грамматика находится в нормальной форме Хомского, если каждое правило имеет вид:

(1) либо A -> BC, A, B, C - нетерминалы,

(2) либо A -> a, a - терминал,

(3) либо S -> e и в этом случае S - не встречается в правых частях правил.

Утверждение. Любую КС-грамматику можно преобразовать в эквивалентную ей в нормальной форме Хомского.

Утверждение. Если КС-грамматика находится в нормальной форме Хомского, тогда для любой цепочки \alpha, если \alpha \in L(G) и m - высота дерева вывода с кроной \alpha , |\alpha | \le  2^{m-1}.

Теорема 4.5. (Лемма о разрастании для контекстно- свободных языков). Для любого КС-языка L существуют такие целые l и k, что любая цепочка R \in L, \mid \! R \mid \! > l, представима в виде R = uvwxy, где

(1) |vwx| <= k

(2) vx \ne  e

(3) uv^iwx^iy \in L для любого i >= 0.

Доказательство. Пусть L = L(G), где G = (N, \Sigma , P, S) - контекстно- свободная грамматика в нормальной форме Хомского. Обозначим через n число нетерминалов, т.е. n = |N|, и рассмотрим l = 2n и k = 2n+1.

Для доказательства того, что l и k удовлетворяют условию теоремы, рассмотрим произвольную цепочку \alpha \in L, для которой |\alpha | > l = 2n. В силу Утверждения получаем, что высота дерева с кроной \alpha больше n + 1 и есть путь по дереву (обозначим его через P ), который проходит более чем через n + 1 вершин. Отсюда по определению дерева вывода имеем, что P содержит более n вершин, помеченных нетерминалами. Таким образом, существует нетерминал, который метит не менее двух вершин пути P. Среди всех таких нетерминалов пусть A - такой, что его вхождение, ближайшее к листу, не содержит других нетерминалов, обладающих этим свойством (если бы это было не так, то выбрали бы этот другой). Пусть q - вхождение A, ближайшее к листу, p - расположенное выше. Представим крону \alpha в виде uvwxy, где w - крона поддерева D1 с корнем q и vwx - крона поддерева D2 с корнем p. Тогда высота поддерева D2 не более (n - 1) + 2 + 1 = n + 2, так что |vwz| <= 2n+1.

Также очевидно, что vx \ne  e, поскольку в силу определения нормальной формы Хомского p имеет двух сыновей, помеченных нетерминалами, из которых не выводится пустая цепочка.

Кроме того, S =>* u Ay =>* uvAxy =>* uvwxy, а также A =>* vAx =>* vwx. Отсюда получаем A =>* viwxi для всех i >= 0 и S =>* uviwxiy для всех i >= 0.

Пример. Покажем, что язык L = {anbncn|n>=1} не является контекстно-свободным языком.

Если бы он был КС-языком, то мы взяли бы константу k, которая определяется в лемме о разрастании. Пусть z = akbkck. Тогда z = uvwxy. Так как |vwx| <= k, то в цепочке vwx не могут быть вхождения каждого из символов a, b и c. Таким образом, цепочка uwy, которая по лемме о разрастании принадлежит L, содержит либо k символов a, либо k символов c. Но она не может иметь k вхождений каждого из символов a, b и c, потому, что |uwy| < 3k. Значит, вхождений какого-то из этих символов в uwy больше, чем другого и, следовательно, uwy \notin  L. Полученное противоречие позволяет заключить, что L - не КС-язык.