Необходимо определить является ли цепочка z элементом языка L(G). Для КС-языков эта проблема разрешима.
Алгоритм: Рассмотреть все синтаксикальные формы грамматики G, имеющие длину, равную длине этой цепочки. Если ни одна из этих цепочек не является строкой z, то zËL(G).
Эффективное решение проблемы выводимости возможно лишь в случае наложения ряда ограничений на определение КС-грамматики.
Вопросы и упражнения
Каким методом определяется принадлежность цепочки языку?
Нормальная форма Грейбаха
Грамматика G находится в нормальной форме Грейбаха, если все правила G имеют вид A®aa, где а – терминальный символ, а a – цепочка, состоящая их терминалов и нетерминалов, а также пустой цепочки:
"x [xÎaÞ xÎTÈNÈ{e}].
Изменение правил грамматики надо производить так, чтобы первоначальный и конечный языки совпадали.
Теорема 1: Если в грамматике есть правило А®a1Ba2 и правило В®b, то эти правила можно заменить эквивалентным правилом вида А®a1ba2.
Замечание: если А®a1Ba2 и В®b1|b2|…|bn, то А®a1b1a2|a1b2a2|…|a1bna2.
|
|
Правила вида А®Аa называются рекурсивными слева.
Теорема 2: Устранение рекурсивных слева правил. Если в грамматике G имеется правило А®Аa и А®b, то эти правила можно эквивалентно заменить правилами А®b|bA’ и А’®a|aA’.
Доказательство: Рассмотрим, какие цепочки порождают первые правила. А®Аa®Аa2®*Aam, где m³1. А®*bam, где m³0.
Покажем, что с помощью эквивалентных правил получаем те же цепочки.
A'®aA’®a2A’®*am, где m³1. A®bA’®*bam, где m³0.
Замечание: Если А®Аa и А®b1|b2|…|bn, то А???(то А®b1A’|b2A’|…|bn A’.)
Теорема 3: Для любого e-свободного КС-языка можно определить КС-грамматику в нормальной форме Грейбаха. При этом язык сохраняется.
Алгоритм:
G: S®AS|AB
A®BS|a
B®AA|b
Шаг 1: Нумерация нетерминалов. {S, A, B} ~ {A1, A2, A3}
G: A1® A2 A1| A2 A3
A2® A3 A1|a
A3® A2 A2|b
Шаг 2: Преобразовать все правила к виду Ai®aja (i£j).
Воспользуемся теоремой 1. A3®A2A2. Есть правило A2®A3A1|a. Заменяем исходное правило для A3 на два: A3® A3A1A2| aA2
G: A1® A2 A1| A2 A3
A2® A3 A1|a
A3® A3A1A2|aA2|b
Шаг 3: Устранить рекурсию слева: A3® A3A1A2|aA2|b. По теореме 2 заменяем первое правило на A3®aA2|b|aA2A’3|bA’3 и A’3® A1A2|A1A2A’3.
G: A1® A2 A1| A2 A3
A2® A3 A1|a
A3® aA2|b|aA2A’3|bA’3
A’3® A1A2|A1A2A’3
Шаг 4: Преобразовать правила с использованием теоремы 1 по убыванию номеров нетерминалов.
T1:Ai::=aAjb & Aj::=c1|c2|…|cn => Ai::=ac1b|ac2b|…|acnb
1.A’3® A2A1A2| A2A3A2| A2A1A2A’3| A2A3A2A’3
2. A’3® A3 A1 A1A2|a A1A2| A3 A1A2A3A2| aA2A3A2| A3 A1 A2A1A2A’3| |a A2A1A2A’3| A3 A1A2A3A2A’3|a A2A3A2A’3 итд. итп.
Вопросы и упражнения
1. Чем отличается НФГ от НФХ?
2. Какие правила называются рекурсивными слева?