- •Вопрос 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
Вопрос 44
Интерпретатор программы
Запись программы в форме ПОЛИЗа удобна для последующей интерпретации (выполнения программы) с помощью стека. Массив ПОЛИЗа просматривается один раз слева направо, при этом:
1) если очередной элемент ПОЛИЗа является операндом, то его значение заносят в стек;
2) если очередной элемент – операция, то на «верхушке» стека находятся ее операнды, которые извлекаются из стека, над ними выполняется соответствующая операция, результат которой заносится в стек;
3) интерпретация продолжается до тех пор, пока не будет считана из ПОЛИЗа точка, стек при этом должен быть пуст.
Пример 2.18. Интерпретировать ПОЛИЗ программы, заданный таблицей 2.5 при введенном значении а, равном 7.
Таблица 2.5 – ПОЛИЗ исходной программы
Продолжение таблицы 2.5 – ПОЛИЗ исходной программы
Вопрос 45 Схемы компиляции
Выделяют две основные схемы компиляции:
- последовательную; - интегрированную.
Определение 5.1. Последовательная схема компиляции – это совокупность последовательно выполняемых программных компонентов, каждый из которых соответствует одному этапу компиляции.
Последовательная схема предполагает не менее одного прохода программы на каждом этапе (рисунок 5.1 а). Построение промежуточной программы не требует наличия разбора, и синтаксический анализатор может не выполнять никакого преобразования программы. Последовательная схема проста и понятна, но она громоздка (по объему занимаемой памяти и времени компиляции программы) и применяется редко.
Определение 5.2. Интегрированная схема компиляции – это схема, в которой компоненты выполняются под управлением синтаксического анализатора. Синтаксический анализатор, осуществляя разбор программы, вызывает лексический анализатор для сборки лексемы, когда в этом возникает необходимость. После завершения распознавания каждой синтаксической единицы программы вызывается семантический анализатор для ее обработки. Главная идея состоит в том, чтобы в ходе построения дерева разбора решать задачи последующих этапов компиляции для каждого вновь сформированного узла. Интеграция приводит к усложнению алгоритмов компиляции. Поэтому выбор подходящей структуры компилятора - сложная задача.
Вопрос 46
СУ-схемы
Интегрированные схемы компиляции базируются на теории перевода языков, основными понятиями которой являются схема синтаксически управляемого перевода (СУ-схема), синтаксически управляемый перевод (СУ - перевод), преобразователь с магазинной памятью (МП - преобразователь). Рассмотрим эти понятия.
Определение 5.3. СУ-схемой Т называется пятерка следующих объектов:
T
=
{VT,
VN,
,
R,
S),
где VT - конечный входной алфавит, терминалы;
VN - конечное множество нетерминалов;
- конечный выходной алфавит;
R - конечное множество правил вида A , , где V*, (VN)*;
S - начальный символ схемы.
Определение 5.4. СУ-схема называется простой, если в каждом правиле A , одноименные нетерминалы встречаются в и в одном и том же порядке.
Определение 5.5. СУ-схема называется постфиксной, если VN** в каждом правиле A , R.
Определение 5.6. СУ-переводом, генерируемым СУ-схемой T, называется множество пар:
Определение 5.7. Грамматика GBX = {VT, VN, P, S), где Р = {А | A , R}, называется входной грамматикой СУ-схемы. Грамматика GВЫХ = { , VN, P, S), где P = {А | A , R}, называется выходной грамматикой СУ-схемы.
Пример 5.1. Рассмотрим СУ-схему Т1 перевода логических выражений в польскую обратную запись. В основе этой схемы лежит соответствие правил записи логических выражений в инфиксной форме и в ПОЛИЗе.
Правила инфиксной формы: Правила ПОЛИЗа:
-
SE
SE
EET
EET
ET
ET
TTF
TTF
TF
TF
F(E)
FE
FF
FF
Fимя
Fимя
СУ-схема Т1 представляется пятеркой Т1 = {VT, VN, , R, S), где S – начальный символ, VT = {, , , имя, (, )}; = {, , , имя}; VN = {S, Е, T, F} и множество R содержит следующие правила:
1) SE, E 2) EET, ET 3) ET, T 4) TTF, TF
5) TF, F 6) F(E), E 7) F F, F 7) Fимя, имя
Здесь имя – любой символ латинского алфавита. Входной грамматикой СУ-схемы Т1 является GВХ = (VT, VN, Р, S), где множество правил Р представлено правилами инфиксной формы. GВЫХ = ( , VN, P, S) - выходная грамматика СУ-схемы T1, а ее правила Р - это правила ПОЛИЗа. Т1 - простая постфиксная СУ-схема. Вывод элемента (abc, abc) имеет вид:
(S, S)(ET, ET)(ETF, ETF)(ETс, ETс)(EFс, EFс) (Ebс, Ebс)(Tbс, Tbс)(Fbс, Fbс)(abc, abc).
СУ-схема T1 порождает элемент перевода (abс, abс) (T1).
