Конспект лекций москва 2004 удк 519. 713(075)+519. 76(075) ббк 22. 18я7
Вид материала | Конспект |
Содержание9.3. Устранение -правил Алгоритм преобразования грамматики. 9.4. Устранение цепных правил (правил вида А В) Алгоритм исключения цепных правил. |
- Учебное пособие тверь 2008 удк 519. 876 (075. 8 + 338 (075. 8) Ббк 3817я731-1 + 450., 2962.9kb.
- Тексты лекций Москва 2008 удк 339. 9(075. 8) Ббк 65. 5я73-2, 1528.45kb.
- Программно-технический комплекс Учебное пособие Новочеркасск юргту (нпи) 2010. Удк, 3911.73kb.
- Удк 152. 27 (075. 8) + 157 (075. 8) + 152. 3 (075, 60.12kb.
- Краткий конспект лекций Кемерово 2002 удк: 744 (075), 1231.26kb.
- Методические указания по курсу Новосибирск 2004 ббк ю 937. 4 Удк 152. 26 (075), 802.63kb.
- Москва 2011 ббк 63. 3 (2)я 7 к 90 удк 947 (075) История России, 110.08kb.
- Курс лекций Гродно 2005 удк 631. 1 (075., 1193.16kb.
- Удк 070(075. 8) Ббк 76. 01я73, 5789.66kb.
- Удк 339. 9(470)(075. 8) Ббк, 7329.81kb.
9.3. Устранение -правил
Устранение -правил связано с исключением построения цепочек, которые после преобразований превращаются в пустую цепочку. Цель такого преобразования грамматики – если в грамматике строится пустая цепочка, то она строится в результате первого шага построения. Применение любого из оставшихся правил приводит к построению непустых цепочек, более того, цепочка, получающаяся из каждого нетерминала, состоит не менее чем из одного терминального символа.
Алгоритм преобразования грамматики.
Пусть дана грамматика G=< VN, VT, S, R>, строится эквивалентная грамматика G’ =< VN’, VT, S, R’>.
- Построение множества N = { A / A + } – множества нетерминальных символов, из которых возможен вывод пустой цепочки. Множество N строится итерационно.
- На первом шаге строится N0:
- На первом шаге строится N0:
N0 = { B / B R}
- Последовательно строятся множества
Ni+1 = Ni { B / B R & ( Ni)* }.
- Построение продолжается до тех пор, пока не получим Ni+1 = = Ni, тогда N = Ni.
- Построение R’ — множества правил эквивалентной грамматики:
- если A0 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 = );
- если S N, включить в R’ также правило S’ S, где S’ – новый начальный символ.
- если A0 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 = );
Таким образом, любая КС-грамматика может быть приведена к виду, когда R либо не содержит -правил, либо есть точно одно правило S’ и S’ не встречается в правых частях остальных правил из R.
Например, пусть дана грамматика G16 с множеством правил
SA B BC;
A aAb ;
B dBc ;
C CCAc . Строим N0= {A, C}, N1= {A, C}= N. Поскольку L(G) (т.к. S N), правила грамматики примут вид
SA B B BC;
A aAb ab;
B dBc;
C CCAc c .
9.4. Устранение цепных правил (правил вида А В)
Применение цепных правил приводит к увеличению длины ветвей синтаксического дерева, исключение цепных правил часто приводит к большей «прозрачности» грамматики и уменьшению длины выводов, которые можно построить.
Алгоритм исключения цепных правил.
Пусть дана грамматика G=< VN, VT, S, R>, строится эквивалентная грамматика G’ =< VN’, VT, S, R’> без цепных правил.
- Построение для каждого A VN множества NA = { B / A B }, т.е. множества нетерминальных символов, выводимых из данного символа. Итерационная процедура построения NA:
- Начальное значение NA0 ={A}.
- NAi+1 = NAi { C / B C R & B NAi }.
- Построение продолжается до тех пор, пока не получим NAi+1 = NAi, тогда NA = NAi
- Начальное значение NA0 ={A}.
- Построение множества R’ (множества правил эквивалентной грамматики): если B R и не является цепным правилом, то включить в R’ все правила вида A , для всех таких A, что B NA.
Рассмотрим пример. Пусть множество правил грамматики G17 имеет вид:
ST+ST;
T MTM;
M (S) i .
Построим для данной грамматики множества NA: NS ={S, T, M}; NT = {T, M}; NM = {M}.
После преобразования грамматики она примет вид:
ST+S MT(S) i ;
T MT (S) i ;
M (S) i .
В данном случае преобразование грамматики не привело к её упрощению, но построенные синтаксические деревья будут иметь меньшую глубину, и построение дерева будет происходить быстрее.
Грамматика называется неукорачивающей, если для любого правила грамматики выполняется. Такое определение применимо как к КС-грамматикам, так и к КЗ-грамматикам. А-грамматика также может быть неукорачивающей. Для КС и А-грамматик необходимым и достаточным условием принадлежности к классу неукорачивающих грамматик является отсутствие в них -правил.
Грамматика называется приведенной, если она неукорачивающая и не содержит непроизводящих символов.
Поэтому, если L(G), то существует приведенная грамматика G1, такая, что L(G1)=L(G).
В случае же L(G), существует эквивалентная грамматика с единственным укорачивающим правилом.