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

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

Содержание


9.3. Устранение -правил
Алгоритм преобразования грамматики.
9.4. Устранение цепных правил (правил вида А  В)
Алгоритм исключения цепных правил.
Подобный материал:
1   ...   9   10   11   12   13   14   15   16   ...   21

9.3. Устранение -правил


Устранение -правил связано с исключением построения цепочек, которые после преобразований превращаются в пустую цепочку. Цель такого преобразования грамматики – если в грамматике строится пустая цепочка, то она строится в результате первого шага построения. Применение любого из оставшихся правил приводит к построению непустых цепочек, более того, цепочка, получающаяся из каждого нетерминала, состоит не менее чем из одного терминального символа.

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


Пусть дана грамматика G=< VN, VT, S, R>, строится эквивалентная грамматика G’ =< VN’, VT, S, R’>.
  1. Построение множества N = { A / A +  } – множества нетерминальных символов, из которых возможен вывод пустой цепочки. Множество N строится итерационно.
    1. На первом шаге строится N0:

N0 = { B / B    R}
    1. Последовательно строятся множества

Ni+1 = Ni { B / B    R &   ( Ni)* }.
    1. Построение продолжается до тех пор, пока не получим Ni+1 = = Ni, тогда N = Ni.
  1. Построение R’ — множества правил эквивалентной грамматики:
    1. если A0 B1 1 B2 ... Bk k  R , k  0 и Bi  N для 0  i  k, но ни один символ в цепочках j, 1  j  k не содержит символа из N, то включить в R’ все правила вида A  0 X1 1 X2 ... Xkk, где Xi — либо Bi, либо (при этом правило A   не включать; это соответствует случаю, когда все i =  );
    2. если S  N, включить в R’ также правило S’ S, где S’ – новый начальный символ.

Таким образом, любая КС-грамматика может быть приведена к виду, когда R либо не содержит -правил, либо есть точно одно правило S’   и S’ не встречается в правых частях остальных правил из R.

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

SA B BC;

A aAb  ;

B dBc ;

C CCAc . Строим N0= {A, C}, N1= {A, C}= N. Поскольку L(G) (т.к. S N), правила грамматики примут вид


SA B B BC;

A aAb ab;

B dBc;

C CCAc c .

9.4. Устранение цепных правил (правил вида А  В)


Применение цепных правил приводит к увеличению длины ветвей синтаксического дерева, исключение цепных правил часто приводит к большей «прозрачности» грамматики и уменьшению длины выводов, которые можно построить.

Алгоритм исключения цепных правил.


Пусть дана грамматика G=< VN, VT, S, R>, строится эквивалентная грамматика G’ =< VN’, VT, S, R’> без цепных правил.
  1. Построение для каждого A VN множества NA = { B / A  B }, т.е. множества нетерминальных символов, выводимых из данного символа. Итерационная процедура построения NA:
    1. Начальное значение NA0 ={A}.
    2. NAi+1 = NAi { C / B  C  R & B  NAi }.
    3. Построение продолжается до тех пор, пока не получим NAi+1 = NAi, тогда NA = NAi
  2. Построение множества R’ (множества правил эквивалентной грамматики): если B    R и не является цепным правилом, то включить в R’ все правила вида A  , для всех таких A, что B  NA.


Рассмотрим пример. Пусть множество правил грамматики G17 имеет вид:

ST+ST;

T MTM;

M (S) i .

Построим для данной грамматики множества NA: NS ={S, T, M}; NT = {T, M}; NM = {M}.

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

ST+S MT(S) i ;

T MT (S) i ;

M (S) i .

В данном случае преобразование грамматики не привело к её упрощению, но построенные синтаксические деревья будут иметь меньшую глубину, и построение дерева будет происходить быстрее.

Грамматика называется неукорачивающей, если для любого правила грамматики  выполняется. Такое определение применимо как к КС-грамматикам, так и к КЗ-грамматикам. А-грамматика также может быть неукорачивающей. Для КС и А-грамматик необходимым и достаточным условием принадлежности к классу неукорачивающих грамматик является отсутствие в них -правил.

Грамматика называется приведенной, если она неукорачивающая и не содержит непроизводящих символов.

Поэтому, если L(G), то существует приведенная грамматика G1, такая, что L(G1)=L(G).

В случае же L(G), существует эквивалентная грамматика с единственным укорачивающим правилом.