
- •Калининградский государственный технический университет системное программное обеспечение (спо)
- •230101.65 «Вычислительные машины, комплексы, системы и сети». Часть I.
- •Лабораторная работа №1 Средства описания грамматик
- •Введение
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 2 Фиксация семантики программы
- •Введение
- •Исходный листинг
- •Результат комментирования
- •Содержание отчета
- •Содержание отчета
- •Содержание отчета
- •Содержание отчета
- •Содержание отчета
- •Выполнение лабораторной работы
- •Содержание отчета
- •Выполнение лабораторной работы
- •Содержание отчета
- •Контрольные вопросы
Содержание отчета
-
Система кодирования;
-
Таблица заранее предопределенных лексем и их кодов;
-
Алгоритм сканирования;
-
Листинг программы.
Контрольные вопросы
-
Кодируются ли комментарии?
-
Какие таблицы формируются при кодировании?
-
В чем достоинство подхода к формированию таблиц отсортированных лексем?
-
На какой фазе компиляции проводится лексическое сканирование?
-
Является ли лексемой Турбо-Паскаля точка?
Лабораторная работа №6
Свертка выражений
Цель работы: изучение методов преобразования арифметических и логических выражений в процессе компиляции.
Введение
Любое
арифметическое и/или логическое выражение
также может быть представлено в виде
синтаксического дерева. Визуально такое
представление удобно для просмотра, но
на практике выражения хранятся в машинном
виде [4]. А для такого хранения больше
подходит польская (префиксная) запись
выражений. Она строится с учетом
приоритета операций и скобок. Например,
инфиксное выражение а
+ b
* c
в польской записи имеет вид
+(a * (b, c)).
Для такой формы наиболее подходящим средством хранения выражения оказывается таблица. Например, есть выражение
a := b * (c – d) + 2 * b * (c – d – 100)
Синтаксическое дерево разбора такого выражения будет иметь вид, представленный на рис. 6.1. А реализация описания внутри компьютера представляется таблицей.
В процессе заполнения такой таблицы проверяется синтаксис выражения, а само представление упрощает переход к машинному языку, который строится на основе двух- или трехадресных команд. Этот переход производится путем редукции. Для рассматриваемого примера она будет иметь вид, представленный табл. 6.1.
Таблица 6.1
Результат |
Операция |
Операнд1 |
Операнд2 |
R1 |
- |
с |
d |
R2 |
- |
c |
d |
R3 |
- |
R3 |
100 |
R4 |
* |
b |
R1 |
R5 |
* |
2 |
b |
R6 |
* |
R5 |
R3 |
a |
+ |
R4 |
R6 |
В процессе заполнения такой таблицы проверяется синтаксис выражения, а само представление упрощает переход к машинному языку, который строится на основе двух- или трехадресных команд. Этот переход производится путем редукции. Для рассматриваемого примера она будет иметь вид (см. табл. 6.1):
a := b * R1 + 2 * b * (c – d – 100)
a := b * R1 + 2 * b * (R2 – 100)
a := b * R1 + 2 * b * R3
a := R4 + 2 * b * R3
a := R4 + R5 * R3
a := R4 + R6
Именно здесь используются сведения о приоритетах операций, которые зафиксированы в таблице стандартных лексем (терминальных символов). На основе приоритетов определяется порядок производства операций в выражении.
Здесь же можно увидеть, в чем заключается один из вариантов оптимизации программы: в данном примере время работы программы можно сократить за счет устранения дублирования вычислений c – d.
Еще один вариант оптимизации – вычисление во время компиляции арифметических выражений, включающих константы, и подстановка итогового результата в выражение.
Следующий вариант – оптимизация булевых выражений:
If a OR b Or c THEN …
Вместо вычисления результата всего выражения синтезируется такой код, который при истинности а автоматически прекращает дальнейшее вычисление выражения, поскольку в дальнейшем результат не изменится.
Выполнение лабораторной работы
-
В соответствии с вариантом выбрать из табл. 6.2 исходной выражение.
-
Сформировать синтаксическое дерево разбора данного выражения при движении слева направо и с учетом приоритета операций.
-
Произвести свертку выражения на основе польской записи и сформировать таблицу, аналогичную табл. 6.1.
-
Определить возможные варианты оптимизации и произвести ее.
Таблица 6.2
№ п/п |
АС |
ВС |
1 |
(a>9) or ((x/4.5-y3)<a) and (b=4) |
x+2*y/(cos(a-7.8)+x)-ln(3a) |
2 |
8.9+sin(x-2*y*(a-6)x)/ey |
(4.9-y(3x+2y-8))*cos3(a-x) |
3 |
not(a>8) and (sin(4(x+y)<>b) and true |
(a+6.9)/(b-3y) <= ((xa+y)/xy-5) |
4 |
(3/x-y/7) >= (ax-by)/a3 |
|
5 |
a2+b3-2abcos(x-a/b) |
sin(/2+x)-cos(|y+x|)2(a+b) |
6 |
not(x(x-3)(x-y)/6 < (a(a-b)/2) or (x >y) |
x3+3a2b-3ab2-y3 >= 6 |
7 |
(x=(a/(a2+b2)) or (y=(a/(a2+b2)) or (a>=b)) |
cos(x)-(a2-b2)1/2+sin(y-a) |
8 |
cos2x+cos2y-sin2a+10cos3(b+2) |
(cos4x >= (cos4x+4cos2x-3y)) and (a/2 <=2b) |
9 |
x5-3x4+8/a3-16y2+15b |
5x4-12y3*24b2+32a |
10 |
((-b+(b2-4ac)1/2/(2a) >0) and true |
(-a/2-(b2/4+x3/27)1/2)1/3 |
11 |
x2-8a(a2+ya-b+y2/4) |
y2-(2a)1/2+(x/2+a+b/(2(2a)1/2) |
12 |
(ax+b)/(x2+yx+sin(ax)) |
2-x+2y+7x2/y3 |
13 |
b2y2+xy3+(7y)1/2-11+a |
(2+y)3+|x|+7b3x2 |
14 |
(-11+(7y)1/2)*(1+y3)x > (ba)2 |
ax2+2axy+by-a <= 0 |
15 |
aln(tg(/4+x/2)-asin(x) |
a(1+y)sin(by)-absin((1+y)b) |
16 |
(x2+y2)2-2a2(x2-y2) |
(a>9) or ((x/4-y3)<a) and (sin(4(x+y) < b) |
17 |
(x2-4)/(y2-a-2)eb |
8.9+(ax-by)/a3-2abcos(x-a/b) |
18 |
(1/x-3)/(ln(x)+(y-1)/a)*|b| |
sin(x-2*y*(a-6)x)- a2+b3 |
19 |
ln|(a+x)/(a-y)|/(2b)*sin(x) |
not(x(x-3)(x-y)/6<= ((xa+y)/xy-5) |
20 |
ln|sin(x2-cos2(y)+b)|*(x+a) |
x=(a/(a2+b2)) or (a/2 <=2b) |
21 |
ln(x+(a2+y2))/(1-x2/b2) |
cos2x+cos2y-sin2a+8/a3-16y2+15b |
22 |
ln(x2+1)/4-ln|x+1|/2+(x-1)/(2(x2+1)) |
(xy3+(7y)1/2)/(y2-a-2)eb |
23 |
2(a1/2y2+by+xa1/2)/(2*x+b) |
(4.9-y(3x+2y-8))*x5-3x4+8 |
24 |
|easin(x2-y/6)|+b |
(x2+y2)2-|x|+7b3x2 |