- •Вопрос 1
- •Определение 1.3. Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .
- •Определение 1.13. Цепочка , для которой существует вывод s*, называется сентенциальной формой или сентенцией в грамматике .
- •Вопрос 2
- •Вопрос 3
- •Расширение допускает единственное -правило вида s, но в этом случае начальный символ грамматики s не должен встречаться в правых частях правил.
- •Вопрос 4
- •3.1.2 Дерево разбора
- •Вопрос 5
- •Вопрос 6
- •Вопрос 7
- •Вопрос 8
- •Существуют следующие три способа представления функции переходов.
- •Вопрос 9 Алгоритм 2.4. Построение ка по регулярной грамматике.
- •Выход: ка .
- •Вопрос 10
- •Алгоритм 2.1. Преобразование нка в дка.
- •Вопрос 11
- •Алгоритм 2.2. Устранение недостижимых состояний ка.
- •Алгоритм 2.3. Объединение эквивалентных состояний ка.
- •Вопрос12
- •3.2.1 Проверка существования языка грамматики
- •3.2.2 Удаление бесполезных символов грамматики
- •Алгоритм 3.2. Устранение нетерминалов, не порождающих терминальных строк. Вход: кс-грамматика .
- •Алгоритм 3.3. Устранение недостижимых символов грамматики. Вход: кс-грамматика .
- •Определим множество достижимых символов z грамматики g, т.Е. Множество:
- •Вопрос13
- •3.2.3 Устранение -правил грамматики Алгоритм 3.4. Устранение -правил. Вход: кс-грамматика .
- •3.2.4 Устранение цепных правил Алгоритм 3.5. Устранение цепных правил. Вход: кс-грамматика .
- •Вопрос 14 Алгоритм 3.6. Устранение левой факторизации правил. Вход: кс-грамматика .
- •Алгоритм 3.7. Устранение прямой левой рекурсии. Вход: кс-грамматика .
- •Вопрос 15
- •Вопрос 16 Алгоритм 3.9. Построение мп-автомата по кс-грамматике.
- •Вопрос 17
- •Вопрос 18
- •18. 3.4.1 Рекурсивный спуск
- •Теорема 3.1. Достаточные условия применимости метода рекурсивного спуска.
- •Вопрос 19
- •Вопрос 20
- •Вопрос 21
- •21. Функционирование распознавателя цепочек для ll(1)-грамматик.
- •Вопрос 22
- •Вопрос 23 Алгоритм 3.16. Построение множеств l(a) и r(a).
- •Вопрос 24
- •Вопрос 26
- •Вопрос 27
- •Вопрос28
- •Вопрос 29
- •Вопрос 30
- •Вопрос 31
- •Вопрос 32. Определение 4.1. Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.
- •Вопрос 33 Общая схема работы компилятора
- •Вопрос 34 ЛекАнализ программы
- •Вопрос 35
- •Вопрос 36
- •Вопрос 37
- •Вопрос 38
- •Вопрос 39
- •Вопрос 40
- •Вопрос 41 Свертка объектного кода программы.
- •Вопрос 42
- •Вопрос 43
- •Вопрос 44
- •Вопрос 45 Схемы компиляции
- •Вопрос 46
- •Вопрос 47
- •Вопрос 48
- •Вопрос 49
- •Вопрос 50
Вопрос 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.
(aabbb
,
{
,0},
)(abbb , { ,0}{a,2}, )
(bbb , { ,0}{a,2}{a,2}, )
(bb , { ,0}{a,2}{a,2}{b,3}, )
(bb , { ,0}{a,2}{a,2}{S,4}, 3)
(b , { ,0}{a,2}{a,2}{S,4}{b,3}, 3)
(b , { ,0}{a,2}{a,2}{S,4}{S,5}, 3,3)
(b , { ,0}{a,2}{S,4}, 3,3,2)
( , { ,0}{a,2}{S,4}{b,3}, 3,3,2)
( , { ,0}{a,2}{S,4}{S,5}, 3,3,2,3)
( , { ,0}{S,1}, 3,3,2,3,2)
( , { ,0}{S`,*}, 3,3,2,3,2,1) – разбор завершен
Соответствующая цепочка вывода будет иметь вид (используется правосторонний вывод): S' => S = aSS => aSb => aaSSb => aaSbb => aabb.
Вопрос 30
30. Пример 3.15. Дана КС-грамматика G({а, b}, {S}, {S→SaSb | ε}, S). Пополненная грамматика для нее будет иметь вид G({a, b}, {S, S'}, {S'→S, S→SaSb | ε}, 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^к |
ошибка |
