Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория автоматов и ФЯ.doc
Скачиваний:
44
Добавлен:
01.12.2018
Размер:
818 Кб
Скачать
☆

4.6. Детерминированный ll-разбор

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

Будем считать, что входная цепочка символов, также как для лексического анализатора, всегда заканчивается ограничителем ┴. Для работы LL(1)-анализатора необходимо построить таблицу, в которой столбцы помечены терминальными символами (включая ┴), а строки – нетерминалами преобразованной грамматики. Для каждого из правил вида A → aγ, правая часть заносится на пересечение строки, помеченной нетерминалом 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

№

шага

Входные

символы

Содержимое

магазина

Порождающее

правило

1

a*(a+a) ┴ 

S ┴ 

S → aVU

2

a*(a+a) ┴ 

aVU ┴ 

3

*(a+a) ┴ 

VU ┴

V → * FV 

4

*(a+a) ┴ 

*FVU ┴

5

(a+a) ┴ 

FVU ┴

F → (S) 

6

(a+a) ┴ 

(S)VU ┴

7

a+a) ┴ 

S)VU ┴

S → aVU

8

a+a) ┴ 

aVU)VU ┴

9

+a) ┴ 

VU)VU ┴

V → λ

10

+a) ┴ 

U)VU ┴

U → + TU 

11

+a) ┴ 

+TU )VU ┴

12

a) ┴ 

TU )VU ┴

T → aV

13

a) ┴ 

aVU )VU ┴

14

) ┴ 

VU )VU ┴

V → λ

15

) ┴ 

U )VU ┴

U → λ

16

) ┴ 

 )VU ┴

17

┴ 

VU ┴

V → λ

18

┴ 

U ┴

U → λ

19

┴ 

┴

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

Табл. 9

№

шага

Входные

символы

Содержимое

магазина

Порождающее

правило

1

a) ┴ 

S ┴ 

S → aVU

2

a) ┴ 

aVU ┴ 

3

) ┴ 

VU ┴

V → λ

4

) ┴ 

U ┴

U → λ

5

) ┴ 

┴

<ошибка>

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