- •Вопрос 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
Вопрос 20
Алгоритм 3.12. Построение множества FOLLOW(1, A).
Алгоритм основан на использовании правил вывода грамматики G.
Шаг 1. Первоначально внести во множество последующих символов для каждого нетерминального символа А все символы, которые в правых частях правил вывода встречаются непосредственно за символом А, т.е.
AVN FOLLOW0(1, A) = {X | B AX P, B VN,
X (VTVN), , (VTVN)*}.
Шаг 2. Внести пустую строку во множество FOLLOW(1, S), т.е.
FOLLOW(1, S) = FOLLOW(1, S){}.
Шаг 3. Для всех АVN вычислить:
FOLLOWi(1,A)=FOLLOWi(1,A)FIRST(1,B),
B(FOLLOWi(1,A)VN).
Шаг 4. Для всех АVN положить:
FOLLOWi(1, A)=FOLLOWi(1, A)FOLLOWi(1, B),
B(FOLLOWi(1, A)VN), если правило B.
Шаг 5. Для всех АVN определить:
FOLLOWi+1(1, A) = FOLLOWi(1, A)FOLLOWi(1, B),
BVN, BA, (VTVN)*.
Шаг 6. Если существует AVN такой, что FOLLOWi+1(1,A)FOLLOWi(1,A), то положить i:=i+1 и вернуться к шагу 3, иначе перейти к шагу 7.
Шаг 7. Исключить из построенных множеств все нетерминальные символы, т.е. AVN FOLLOW(1, A) = FOLLOWi(1, A)\ N.
Конец алгоритма.
Этап 3. Построение множеств FOLLOW(1, A) для каждого нетерминала А представлено в таблице 3.4.
Таблица 3.4 – Построение множеств FOLLOW(1, A)
Шаг |
Нетерминалы |
FOLLOWi(1, A) |
FOLLOWi (1, A) |
FOLLOWi (1, A) |
0 |
S |
) |
), |
), |
R |
|
|
|
|
T |
R |
R, +, - |
R, +, - |
|
1 |
S |
), |
), |
), |
R |
), |
), |
), |
|
T |
R, +, - |
R, +, - |
R, +, -, ), |
|
2 |
S |
), |
), |
), |
R |
), |
), |
), |
|
T |
R, +, -, ), |
R, +, -, ), |
R, +, -, ), |
|
FOLLOW(1, S) |
), |
|||
FOLLOW(1, R) |
), |
|||
FOLLOW(1, T) |
+, -, ), |
|||
Вопрос 21
21. Функционирование распознавателя цепочек для ll(1)-грамматик.
Шаг 1. Помещаем в стек начальный символ грамматики S, а во входной буфер - исходную цепочку символов.
Шаг 2. До тех пор пока в стеке и во входном буфере останется только пустая строка либо будет обнаружена ошибка в алгоритме разбора, выполняем одно из следующих действий:
если на верхушке стека находится нетерминальный символ А и очередной символ входной строки символ а, то выполняем операцию «свертка» по правилу Ах при условии, что аFIRST(1, x), т.е. извлекаем из стека символ А и заносим в стек строку х, не меняя содержимого входного буфера;
если на верхушке стека находится нетерминальный символ А и очередной символ входной строки символ а, то выполняем операцию «свертка» по правилу А при условии, что аFOLLOW(1, A), т.е. извлекаем из стека символ А и заносим в стек строку , не меняя содержимого входного буфера;
если на верхушке стека находится терминальный символ а, совпадающий с очередным символом входной строки, то выполняем операцию «выброс», т.е. удаляем из стека и входного буфера данный терминальный символ;
если содержимое стека и входного буфера пусто, то исходная строка прочитана полностью, и разбор завершен удачно;
если ни одно из данных условий не выполнено, то цепочка не принадлежит заданному языку, и алгоритм завершает свою работу с ошибкой.
Шаг 5. Разбор строки (a+(b-a)) для грамматики G показан в таблице 3.6.
Таблица 3.6 - Разбор строки (a+(b-a)) для грамматики G
Стек |
Входной буфер |
Действие |
S |
(a+(b-a)) |
свертка STR, т.к. ( FIRST(1, TR) |
TR |
(a+(b-a)) |
свертка T(S), т.к. ( FIRST(1, (S)) |
(S)R |
(a+(b-a)) |
выброс |
S)R |
a+(b-a)) |
свертка STR, т.к. a FIRST(1, TR) |
TR)R |
a+(b-a)) |
свертка Ta, т.к. a FIRST(1, a) |
aR)R |
a+(b-a)) |
выброс |
R)R |
+(b-a)) |
свертка R+TR, т.к. + FIRST(1, TR) |
+TR)R |
+(b-a)) |
выброс |
TR)R |
(b-a)) |
свертка T(S), т.к. ( FIRST(1, (S)) |
(S)R)R |
(b-a)) |
выброс |
S)R)R |
b-a)) |
свертка STR, т.к. b FIRST(1, TR) |
TR)R)R |
b-a)) |
свертка Tb, т.к. b FIRST(1, b) |
bR)R)R |
b-a)) |
выброс |
R)R)R |
-a)) |
свертка R-TR, т.к. - FIRST(1, -TR) |
-TR)R)R |
-a)) |
выброс |
TR)R)R |
a)) |
свертка Ta, т.к. a FIRST(1, a) |
aR)R)R |
a)) |
выброс |
R)R)R |
)) |
свертка R, т.к. ) FOLLOW(1, R) |
)R)R |
)) |
выброс |
R)R |
) |
свертка R, т.к. ) FOLLOW(1, R) |
)R |
) |
выброс |
R |
|
свертка R, т.к. FOLLOW(1, R) |
|
|
строка принята полностью |
