Синтаксический анализ
Теорема 4.3. Пусть - расширенный МП-автомат. Тогда существует МП- автомат M' , такой, что L(M') = L(M).
Расширенный МП-автомат называется детерминированным, если выполнены следующие условия:
(1) Множество D(q, a, u) содержит не более одного элемента для любых ,
(2) Если и , то не существует цепочки x такой, что u = vx или v = ux,
(3) Если , то не существует цепочки x такой, что u = vx или v = ux.
Теорема 4.4. Пусть - расширенный ДМП-автомат. Тогда существует ДМП- автомат M' , такой, что L(M') = L(M).
ДМП-автомат и расширенный ДМП-автомат лежат в основе рассматриваемых далее в этой главе, соответственно, LL- и LR-анализаторов.
Определение. Говорят, что КС-грамматика находится в нормальной форме Хомского, если каждое правило имеет вид:
(1) либо A -> BC, A, B, C - нетерминалы,
(2) либо A -> a, a - терминал,
(3) либо S -> e и в этом случае S - не встречается в правых частях правил.
Утверждение. Любую КС-грамматику можно преобразовать в эквивалентную ей в нормальной форме Хомского.
Утверждение. Если КС-грамматика находится в нормальной форме Хомского, тогда для любой цепочки если и m - высота дерева вывода с кроной .
Теорема 4.5. (Лемма о разрастании для контекстно- свободных языков). Для любого КС-языка L существуют такие целые l и k, что любая цепочка , представима в виде R = uvwxy, где
(1) |vwx| <= k
(2)
(3) для любого i >= 0.
Доказательство. Пусть L = L(G), где - контекстно- свободная грамматика в нормальной форме Хомского. Обозначим через n число нетерминалов, т.е. n = |N|, и рассмотрим l = 2n и k = 2n+1.
Для доказательства того, что l и k удовлетворяют условию теоремы, рассмотрим произвольную цепочку , для которой . В силу Утверждения получаем, что высота дерева с кроной больше n + 1 и есть путь по дереву (обозначим его через P ), который проходит более чем через n + 1 вершин. Отсюда по определению дерева вывода имеем, что P содержит более n вершин, помеченных нетерминалами. Таким образом, существует нетерминал, который метит не менее двух вершин пути P. Среди всех таких нетерминалов пусть A - такой, что его вхождение, ближайшее к листу, не содержит других нетерминалов, обладающих этим свойством (если бы это было не так, то выбрали бы этот другой). Пусть q - вхождение A, ближайшее к листу, p - расположенное выше. Представим крону в виде uvwxy, где w - крона поддерева D1 с корнем q и vwx - крона поддерева D2 с корнем p. Тогда высота поддерева D2 не более (n - 1) + 2 + 1 = n + 2, так что |vwz| <= 2n+1.
Также очевидно, что , поскольку в силу определения нормальной формы Хомского 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 больше, чем другого и, следовательно, . Полученное противоречие позволяет заключить, что L - не КС-язык.