Конспект лекций москва 2004 удк 519. 713(075)+519. 76(075) ббк 22. 18я7

Вид материалаКонспект

Содержание


9. Преобразования КС-грамматик
9.1 Устранение непроизводящих правил
А имеют следующий вид и других правил для А
Алгоритм устранения непроизводящих нетерминалов.
9.2. Устранение недостижимых нетерминалов
Алгоритм преобразования грамматики.
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   ...   21

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, jVT*}
    2. Последовательно строятся множества NRi+1={ A/ Aj, j(NRiVT)*}
    3. Построение продолжается до тех пор, пока не получим NRi+1= NRi или же NRi= VN. Тогда NR = NRi.
  2. Исключаем из грамматики все правила, в которых присутствуют нетерминалы из VN\ NR.

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

S ABBC;

A AAAB;

B bBa;

СсСd AC.

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

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

S BC;

B bBa;

СсС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 bBa;

СсСd.

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

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

S B C

B bBa

СсСd