Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП_шпоры.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.21 Mб
Скачать

Вопрос 29

Пример распознавателя для LR(0)- грамматик.

Простейшим случаем LR(к)-грамматик являются LR(0)-грамматики. При к=0 распознающий расширенный МП-автомат не принимает во внимание те­кущий символ. Решение о выполняе­мом действии принимается только на основании содержимого стека..

Рассмотрим КС-грамматику G({a,b}, {S}, {S->aSS|b}, S). Пополненная для нее будет иметь вид G({a,b}, {S, S`}, {S'->S, S->aSS|b}. S'). Эта грамматика является LR(0)-грамматикой. Управляющая таблица для нее :

Стек

Действие

Переход

S

a

b

сдвиг

1

2

3

S

успех 1

 

 

 

a

сдвиг

4

2

3

b

свертка 3

 

 

 

aS

сдвиг

5

2

3

aSS

свертка 2

 

 

 

Колонка «Стек» введена для пояснения состояния стека автомата. Пустые клетки соответствуют состоянию «ошибка». Прави­ла в грамматике пронумерованы от 1 до 3 (при этом будем считать, что состоя­нию «успех» — свертке к нулевому символу — в пополненной грамматике всегда соответствует первое правило). Распознаватель работает, невзирая на текущий символ, обозреваемый считывающей головкой расширенного МП-автомата, по­этому колонка «Действие» в таблице имеет только один столбец, не помеченный никаким символом, — указанное в ней данное действие выполняется всегда для каждой строки таблицы.

Конфигурацию расширенного МП-автомата будем отображать в виде трех компонентов: не прочитанная еще часть входной цепочки символов, содержимое стека МП-автомата, последовательность номеров примененных правил. В стеке МП-автомата вместе с помещенными туда символами показаны и номера строк управляющей таблицы, соответствующие этим символам в формате {символ, номер строки}.

Разбор цепочки aabbb.

  1. (aabbb , { ,0}, )

  2. (abbb , { ,0}{a,2}, )

  3. (bbb , { ,0}{a,2}{a,2}, )

  4. (bb , { ,0}{a,2}{a,2}{b,3}, )

  5. (bb , { ,0}{a,2}{a,2}{S,4}, 3)

  6. (b , { ,0}{a,2}{a,2}{S,4}{b,3}, 3)

  7. (b , { ,0}{a,2}{a,2}{S,4}{S,5}, 3,3)

  8. (b , { ,0}{a,2}{S,4}, 3,3,2)

  9. ( , { ,0}{a,2}{S,4}{b,3}, 3,3,2)

  10. ( , { ,0}{a,2}{S,4}{S,5}, 3,3,2,3)

  11. ( , { ,0}{S,1}, 3,3,2,3,2)

  12. ( , { ,0}{S`,*}, 3,3,2,3,2,1) – разбор завершен

Соответствующая цепочка вывода будет иметь вид (используется правосторон­ний вывод): S' => S = aSS => aSb => aaSSb => aaSbb => aabb.

Вопрос 30

30. Пример 3.15. Дана КС-грамматика G({а, b}, {S}, {SSaSb | ε}, S). Пополненная грамматика для нее будет иметь вид G({a, b}, {S, S'}, {S'S, SSaSb | ε}, S'). Эта грамматика является LR(1)-грамматикой. Управляющая таблица для нее приведена в таблице 3.7.

Таблица 3.7 - Управляющая таблица для LR(1)-грамматики

Номер

Стек

Действие

Переход

a

b

^к

a

b

S

0

^н

свертка, 3

свертка, 3

1

1

S

сдвиг

успех,1

2

2

Sa

свертка, 3

свертка, 3

3

3

SaS

сдвиг

сдвиг

4

5

4

SaSa

свертка, 3

свертка, 3

6

5

SaSb

свертка, 2

свертка, 2

6

SaSaS

сдвиг

сдвиг

4

7

7

SaSaSb

свертка, 2

свертка, 2

Разбор цепочки ababb распознавателем показан в таблице 3.8.

Таблица 3.8 – Разбор цепочки ababb

Стек

Буфер

Действие

{^н, 0}

ababb^к

свертка S®e

{^н, 0}{S, 1}

ababb^к

сдвиг

{^н, 0}{S, 1}{a, 2}

babb^к

свертка S®e

{^н, 0}{S, 1}{a, 2}{S, 3}

babb^к

сдвиг

{^н, 0}{S, 1}{a, 2}{S, 3}{b, 5}

abb^к

свертка S®SaSb

{^н, 0}{S, 1}

abb^к

сдвиг

{^н, 0}{S, 1}{a, 2}

bb^к

свертка S®e

{^н, 0}{S, 1}{a, 2}{S, 3}

bb^к

сдвиг

{^н, 0}{S, 1}{a, 2}{S, 3}{b, 5}

b^к

ошибка