Проблема принадлежности

Необходимо определить является ли цепочка 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. Какие правила называются рекурсивными слева?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: