Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sergievskii_g_m_korotkova_m_a_vvedenie_v_matema...doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

9. Преобразования кс-грамматик

В данном разделе приводятся такие преобразования грамматик, которые не выводят нас из класса эквивалентности, т.е. грамматика G1 таким образом преобразуется в грамматику G2, чтобы L(G1)=L(G2).

9.1 Устранение непроизводящих правил

Непроизводящими правилами грамматики называются правила, применение которых никогда не приводит к построению терминальных цепочек.

Например, пусть правила для нетерминала А имеют следующий вид и других правил для А нет:

АА А В А

В этом случае, появившись в цепочке, нетерминал А никогда не будет заменен терминальной цепочкой. Естественно, в реальности ситуации бывают не столь простые.

Алгоритм устранения непроизводящих нетерминалов.

Пусть дана грамматика G = < VN, VT,S, R>, строится эквивалентная грамматика без непроизводящих символов G’ = < VN’, VT, S, R’>.

  1. Построение множества производящих нетерминалов NR:

    1. Строится множество NR1 = {A/ Aj, jVT*}

    2. Последовательно строятся множества NRi+1={ A/ Aj, j(NRiVT)*}

    3. Построение продолжается до тех пор, пока не получим NRi+1= NRi или же NRi= VN. Тогда NR = NRi.

  2. Исключаем из грамматики все правила, в которых присутствуют нетерминалы из VN\ NR.

Н апример, рассмотрим грамматику G14 с множеством правил

S ABBC;

A AAAB;

B bBa;

СсСd AC.

Построим множество NR. NR1={B,C}, NR2={S, B, C}, NR3= NR2= =NR.

Правила преобразованной грамматики:

S BC;

B bBa;

СсСd .

9.2. Устранение недостижимых нетерминалов

Недостижимыми нетерминалами называются нетерминалы, которые никогда не могут быть построены при построении вывода, начиная с начального символа грамматики.

Следует отметить, что такие нетерминалы в грамматиках встречаются в основном тогда, когда исключены некоторые непроизводящие символы, т.е. недостижимым нетерминал становится чаще всего после исключения некоторых непроизводящих символов. Например, если в грамматике правила для нетерминала А: АА А В А, и нетерминал В не встречается в других правых частях правил грамматики, то в этом случае, после устранения нетерминала А нетерминал В становится недостижимым, и, следовательно, его можно исключить из грамматики без изменения порождаемого ей языка. Построение множества недостижимых нетерминалов похоже на построение множества непроизводящих нетерминалов: строится множество всех достижимых нетерминалов, а затем исключаются все остальные нетерминалы грамматики.

Алгоритм преобразования грамматики.

Строится грамматика, в которой используются только достижимые нетерминалы (множество достижимых нетерминалов – D) , выглядит следующим образом:

Пусть дана грамматика G=< VN, VT, S, R>, строится эквивалентная грамматика без недостижимых нетерминалов G’ =< VN’, VT, S, R’>.

  1. Построение множества достижимых нетерминалов:

    1. Начальное значение D0=S.

    2. Итерационное построение множества D:

Di+1= Di { A/B AR B Di}

    1. Построение продолжается до тех пор, пока Di+1= Di или Di+1= =VN, в обоих случаях VN’= Di+1,

  1. Построение множества правил преобразованной грамматики:

R’={ Ri / Ri=(A), A VN’, ( VN’ VT)*}. Построенная грамматика не содержит недостижимых нетерминалов.

Например, рассмотрим грамматику G15 с множеством правил

S A C B C;

A AD DF;

D aA D A;

F b F;

B bBa;

СсСd.

Тогда здесь A и D непроизводящие нетерминалы, после их устранения нетерминал F становится недостижимым, поэтому нетерминалы A, D и F могут быть исключены из грамматики с сохранением языка, порождаемого грамматикой.

Правила преобразованной грамматики:

S B C

B bBa

СсСd

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]