Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
31 слайд
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
386.08 kB
Просмотров:
88
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![](/documents_6/2b760ef76e054a37c2c90623070b7eec/img0.jpg)
№2 слайд![. Генерация внутреннего](/documents_6/2b760ef76e054a37c2c90623070b7eec/img1.jpg)
Содержание слайда: 5.1 Генерация внутреннего представления программы
Результатом работы синтаксического анализатора должно быть некоторое представление программы, которое отражает ее синтаксическую структуру.
Программа в таком представлении дальше может либо интерпретироваться либо транслироваться в объектный код.
№3 слайд![. . Язык внутреннего](/documents_6/2b760ef76e054a37c2c90623070b7eec/img2.jpg)
Содержание слайда: 5.1.1 Язык внутреннего представления программы
Свойства:
Он позволяет фиксировать синтаксическую структуру программы.
Текст на нем можно автоматически генерировать на этапе синтаксического разбора.
Его конструкции должны достаточно просто транслироваться в объектный код либо достаточно эффективно интерпретироваться.
№4 слайд![. . Язык внутреннего](/documents_6/2b760ef76e054a37c2c90623070b7eec/img3.jpg)
Содержание слайда: 5.1.1 Язык внутреннего представления программы
Некоторые общепринятые способы внутреннего представления программы:
Постфиксная запись;
Префиксная запись;
Многоадресный код с неявно именуемыми результатами (триады);
Многоадресный код с явно именуемыми результатами (тетрады);
Связные списочные структуры, представляющие деревья операций.
№5 слайд![Пример lt stmt gt lt id gt lt](/documents_6/2b760ef76e054a37c2c90623070b7eec/img4.jpg)
Содержание слайда: Пример
<stmt> ::= <id> := <expr>
<expr> ::= <expr> + <term> | <term>
<term> ::= <term> * <factor> | <factor>
<factor> ::= (<expr>) | <id>
A:=B*C+D
ABC*D+:=
Польская инверсная запись
№6 слайд![Пример](/documents_6/2b760ef76e054a37c2c90623070b7eec/img5.jpg)
Содержание слайда: Пример
№7 слайд![. . ПОЛИЗ В полизе операнды](/documents_6/2b760ef76e054a37c2c90623070b7eec/img6.jpg)
Содержание слайда: 5.1.2 ПОЛИЗ
В полизе операнды выполняются слева направо в порядке их следования (в инфиксной записи), знаки операций размещают таким образом, что знаку операции непосредственно предшествуют операнды, скобки отсутствуют.
a*(b-c)/d-(e+f)*g
ПОЛИЗ: abc-*d/ef+g*-
Формальное определение постфиксной записи:
Если E – единственный операнд, то полизом такого выражения будет этот операнд
Если есть выражение вида E1 Ѳ E2, где Ѳ – бинарная операция, то E1' E2' Ѳ, где E1', E2' – полизы E1 и E2.
Если Ѳ E, где Ѳ – знак унарной операции, то E' Ѳ, где E' – полиз E.
Полизом выражения (E) будет E', где E' – полиз E.
№8 слайд![. . ПОЛИЗ Алгоритм](/documents_6/2b760ef76e054a37c2c90623070b7eec/img7.jpg)
Содержание слайда: 5.1.2 ПОЛИЗ
Алгоритм интерпретации Полиза.
Используем стек, выражения читаем слева направо. Если очередным элементом полиза является операнд, то заталкиваем в стек. Если операция, то из стека выталкиваем необходимое количество операндов, проводим вычисления и результат заталкиваем в стек.
№9 слайд![. Синтаксически управляемый](/documents_6/2b760ef76e054a37c2c90623070b7eec/img8.jpg)
Содержание слайда: 5.2 Синтаксически управляемый перевод
На практике синтаксический, семантический анализ и генерация внутреннего представления программы осуществляется одновременно. Существует несколько способов, один из них – синтаксически управляемый перевод.
В основе СУ – перевода лежит способ сопоставления правилам грамматики соответствующих процедур генерации (семантические подпрограммы).
№10 слайд![. . Генерация внутреннего](/documents_6/2b760ef76e054a37c2c90623070b7eec/img9.jpg)
Содержание слайда: 5.2.1 Генерация внутреннего представления арифметического выражения
№11 слайд![. . Генерация внутреннего](/documents_6/2b760ef76e054a37c2c90623070b7eec/img10.jpg)
Содержание слайда: 5.2.1 Генерация внутреннего представления арифметического выражения
Левосторонний вывод
E => T => T*F =>F*F => x*F => x*(E) => x*(E+T) => x*(T+T) => x*(F+T) => x*(x+T) => x*(x+F) => x*(x+y)
2 3 4 6 5 1 2 4 6 4 7
* x + x y префиксная запись
Правосторонний вывод
E => T => T*F => T*(E) => T*(E+T) => T*(E+F) => T*(E+y) => T*(T+y) => T*(F+y) => T*(x+y) => F*(x+y) =>x*(x+y)
6 4 6 4 2 7 4 1 5 3 2
x x y + * постфиксная запись
№12 слайд![. . Трансляция кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img11.jpg)
Содержание слайда: 5.2.2 Трансляция кода для интерпретации
№13 слайд![. . Трансляция кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img12.jpg)
Содержание слайда: 5.2.2 Трансляция кода для интерпретации
xADD proc near
pop bp; адрес возврата
pop ax; первый операнд
pop bx; второй операнд
ADD ax,bx; сложение
Push ax; результат в стек
Push bp; адрес возврата в стек
ret ; возврат xADD endp
№14 слайд![. . Трансляция кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img13.jpg)
Содержание слайда: 5.2.2 Трансляция кода для интерпретации
Про операцию присвоения
I := E
В полизе IE’:= ,
где I – адрес, E’ – полиз E
№15 слайд![Пример написания](/documents_6/2b760ef76e054a37c2c90623070b7eec/img14.jpg)
Содержание слайда: Пример написания семантических процедур
Дана грамматика для описания дробных чисел с точкой. Обеспечить перевод числа таким образом, чтобы целая часть стала дробной, а дробная – целой.
1 <десят. с фиксир. точкой> := <целое> <.> <целое>
2 <.> := .
3 < целое > := <целое> <цифра>
4 < целое > := <цифра>
5 <цифра> := 0 | 1 | … |9
0 { int f=0; }
2 { f=1; }
5 { if (f) printf(“%c”, c);
else q.enque(c); // добавить в очередь}
1 { printf(“.”); while (!q.queue()) printf(“%c”, q.deque);}
№16 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img15.jpg)
Содержание слайда: 5.2.3 Генерация кода для оператора READ
№17 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img16.jpg)
Содержание слайда: 5.2.4 Генерация кода для безусловного перехода
goto L
[jmp L]
[L: ]
Оператор перехода в терминах ПОЛИЗа означает, что процесс интерпретации надо продолжить с того элемента ПОЛИЗа, который указан как операнд операции перехода.
Чтобы можно было ссылаться на элементы ПОЛИЗа, будем считать, что все они перенумерованы, начиная с 1 (допустим, занесены в последовательные элементы одномерного массива).
Пусть ПОЛИЗ оператора, помеченного меткой L, начинается с номера p, тогда оператор перехода goto L в ПОЛИЗе можно записать как p !
где ! - операция выбора элемента ПОЛИЗа, номер которого равен p.
№18 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img17.jpg)
Содержание слайда: 5.2.5 Генерация кода для оператора IF
1. If B then S
Введем вспомогательную операцию - условный переход "по лжи" с семантикой
if (not B) then goto L
Это двухместная операция с операндами B и L. Обозначим ее !F
ПОЛИЗ: B’ p !F
где p - номер элемента, с которого начинается ПОЛИЗ оператора, помеченного меткой L.
2. if B then S1 else S2
if (not B) then goto L2; S1; goto L3; L2: S2; L3: ...
ПОЛИЗ: B’ p2 !F S1’ p3 ! S2’ ...
№19 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img18.jpg)
Содержание слайда: 5.2.5 Генерация кода для оператора IF
№20 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img19.jpg)
Содержание слайда: 5.2.5 Генерация кода для оператора IF
№21 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img20.jpg)
Содержание слайда: 5.2.6 Генерация кода для цикла WHILE
№22 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img21.jpg)
Содержание слайда: 5.2.6 Генерация кода для цикла WHILE
№23 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img22.jpg)
Содержание слайда: 5.2.6 Генерация кода для цикла WHILE
№24 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img23.jpg)
Содержание слайда: 5.2.7 Генерация кода для цикла FOR
№25 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img24.jpg)
Содержание слайда: 5.2.7 Генерация кода для цикла FOR
№26 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img25.jpg)
Содержание слайда: 5.2.7 Генерация кода для цикла FOR
№27 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img26.jpg)
Содержание слайда: 5.2.7 Генерация кода для цикла FOR
№28 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img27.jpg)
Содержание слайда: 5.2.8 Генерация кода для оператора CASE
№29 слайд![. . Генерация кода для цикла](/documents_6/2b760ef76e054a37c2c90623070b7eec/img28.jpg)
Содержание слайда: 5.2.9 Генерация кода для цикла с постусловием REPEAT
№30 слайд![. . Генерация кода для](/documents_6/2b760ef76e054a37c2c90623070b7eec/img29.jpg)
Содержание слайда: 5.2.10 Генерация кода для раздела объявления переменных
№31 слайд![Пример. Генерация кода](/documents_6/2b760ef76e054a37c2c90623070b7eec/img30.jpg)
Содержание слайда: Пример. Генерация кода