Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Детерминированный LL-разбор

 

КС-грамматика, преобразованная к обобщенной нормальной форме Грейбах, допускает однозначный LL-разбор, если для каждой группы порождающих правил с одним и тем же нетерминалом в левой части правые части будут однозначно различимы по нескольким первым терминальным символам. В самом простом случае они должны различаться по одному символу, тогда на каждом шаге разбора проверяется на совпадение один верхний символ магазина (если он терминал) и очередной символ на входе. Такой разбор называется LL(1)-анализом, а алгоритм разбора – LL(1)-анализатором.

Будем считать, что входная цепочка символов, также как для лексического анализатора, всегда заканчивается ограничителем . Для работы LL(1)-анализатора необходимо построить таблицу, в которой столбцы помечены терминальными символами (включая ), а строки – нетерминалами преобразованной грамматики. Для каждого из правил вида Aaγ, правая часть заносится на пересечение строки, помеченной нетерминалом A, и столбца, помеченного терминалом a. Если же правая часть правила пустая, то во все клетки строки, не занятые другими правилами, записывается λ.

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

1) если на вершине магазина нетерминал, то, в зависимости от того, каков очередной входной символ, этот нетерминал заменяется символами правой части соответствующего правила, причем символы записываются в обратном порядке. Если для очередного входного символа в таблице записано λ, то нетерминал удаляется из магазина, а если в таблице пустая клетка, то анализатор прекращает цикл из-за ошибочного символа во входной цепочке;

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

Цикл прекращается, когда входная цепочка символов оказалась вся просмотрена. Если при этом магазин пуст, то входная цепочка символов считается распознанной, если не пуст – то нераспознанной.

Пример 8. Пусть задана грамматика простых арифметических выражений, преобразованная к обобщенной нормальной форме Грейбах:

S → (S)VU | aVU

U → + TU | λ

T → (S)V | aV

V → * FV | λ

F → (S) | a

В табл. 7 приведены действия LL(1)-анализатора.


Табл. 7

  + * ( ) a
S     (S)VU   aVU  
U + TU λ λ λ λ λ
T     (S)V   aV  
V λ * FV λ λ λ λ
F     (S)   a  

 

Пусть на вход анализатора поступает цепочка: a * (a + a). Шаги работы анализатора представлены в табл. 8.

Табл. 8

№ шага Входные символы Содержимое магазина Порождающее правило
a*(a+a) S SaVU
a*(a+a) aVU  
*(a+a) VU V → * FV
*(a+a) *FVU  
(a+a) FVU F → (S)
(a+a) (S)VU  
a+a) S)VU SaVU
a+a) aVU)VU  
+a) VU)VU V → λ
+a) U)VU U → + TU
+a) +TU )VU
a) TU )VU TaV
a) aVU )VU
) VU )VU V → λ
) U )VU U → λ
) )VU
VU V → λ
U U → λ

Пусть на вход анализатора поступает ошибочная цепочка: a). Шаги работы анализатора представлены в табл. 9.

Табл. 9

№ шага Входные символы Содержимое магазина Порождающее правило
a) S SaVU
a) aVU  
) VU V → λ
) U U → λ
) <ошибка>

Конец примера.



<== предыдущая страница | следующая страница ==>
Преобразование КС-грамматики к обобщенной нормальной форме Грейбах | Обратная польская строка для арифметических выражений

Дата добавления: 2015-07-26; просмотров: 151; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.