Курсовой проект по СПО
«Разработка отдельных фаз компиляции для заданного входного языка»
Выполнила:
студент группы УТС-411 Мухамадеева Г.И.
Уфа 2007
Системное Программное Обеспечение
Схема трансляции
Компилятор – программный модуль, задачей которого является перевод программы, написанной на одном из языков программирования (исходном языке) в программу на языке ассемблера или языке машинных команд.
|
Исходная |
Лексический анализ |
|
Схема трансляции: |
программа |
||
|
|||
|
|
||
|
Анализ и локализация |
Синтаксический разбор |
|
|
обнаруженной ошибки |
||
|
|
||
|
Сообщение об |
Семантический анализ |
|
|
ошибке |
||
|
|
Анализ
Внутреннее
представление
программы
Подготовка к генерации кода
Генерация кода
Синтез
Объектная
программа
Системное Программное Обеспечение
Таблица идентификаторов
Таблица идентификаторов – это специальным образом организованные наборы данных, служащие для хранения информации об элементах исходной программы
Способы организации ТИ:
Простой список; Упорядоченный список; Простое рехэширование;
Рехэширование с использованием псевдослучайных чисел; Рехэширование с помощью произведения; Бинарное дерево; Метод цепочек;
Системное Программное Обеспечение
Метод простого рехэширования
Для организации таблицы идентификаторов по методу рехэширования необходимо определить все хэш-функции h[i] для всех i. Чаще всего функции h[i] определяют как некоторые модификации хэш-функции h.
h[i](A) = (h(A) + i) mod N,
где N – максимальное значение хэш-функции.
Системное Программное Обеспечение
Метод простого рехэширования
Блок-схема добавления элемента в ТИ методом простого рехэширования:
начало
Вычислить ХФ для нов. эл. А, n=h(A)
да |
нет |
|
Ячейка по адр. n пустая? |
i = 1;
По адр. n размещаем идентификатор А
n[i]=h[i](A) |
|
|
да |
нет |
|
Ячейка по адр. n[i] пустая? |
|
|
да |
нет |
|
|
n[i]=n |
|
По адр. n[i] |
|
|
размещаем |
i++; |
|
идентификатор А |
||
|
||
Сообщение об |
|
|
ошибке |
|
конец
Системное Программное Обеспечение
Метод простого рехэширования
Блок-схема поиска элемента в ТИ, организованной методом простого рехэширования:
Системное Программное Обеспечение
Метод цепочек
Хэш-функция вычисляет адрес, по которому происходит обращение сначала к хеш-таблице, а затем через нее по найденному адресу — к таблице идентификаторов. В таблицу идентификаторов для каждого элемента добавляется поле, в котором может содержаться ссылка на любой элемент таблицы. В случае возникновения коллизии алгоритм размещает элементы в ячейках таблицы, связывая их друг с другом последовательно через поле ссылки.
Системное Программное Обеспечение
Метод цепочек
Блок-схема добавления элемента в ТИ методом цепочек:
Да
По адр. n[i] размещаем значение указателя В ТИ доб. нов. ячейка,
в кот. размещаем идентификатор А; Указ. перемеща ем на след. своб. ячейку
Начало
ХТ - пусты е ячейки; ТИ - пустые ячейки; Указ. - на первую
сво б. ячейку в ТИ; i:=1;
Вычислить ХФ для нов. эл. А, n[i]=hi(A),
Нет
Ячейка по адр. n[i] пустая?
j:= 1;
mj- адрес в ТИ ;
Да
В поле ссылки заносим знач. указателя; доб . нов. яче йку в ТИ
Нет |
Поле ссылки mj пусто? |
j:= j+1; |
mj- адрес в ТИ ; |
|
Да |
Есть ещё идент. дл я доб.? |
Нет |
||
|
|
|
|
|
|
|
|
|
|
|
|
i:= i+1; |
|
|
|
|
|
n[i]:=hi(B); |
|
|
Конец |
||
|
|
|
|
|
|
Системное Программное Обеспечение
Метод цепочек
Блок-схема поиска элемента в ТИ, организованной методом цепочек:
|
Начало |
|
|
|
|
|
|
Вычислить ХФ для |
|
|
|
|
|
|
искомогов. эл . А, |
|
|
|
|
|
|
n=h(A), |
|
|
|
|
|
Да |
Ячейка по адр. n пустая? |
Нет |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
Элемен т не найден. |
|
j:= 1; |
|
|
|
|
|
|
mj- адрес в ХТ; |
|
|
||
|
Да |
Эл. в ячейке mj |
= A? |
Нет |
|
|
|
|
|
|
|||
Да |
|
Нет |
|
Да |
Поле ссылки пусто? |
Нет |
Поле ссылки пусто? |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Элемен т не найд ен. |
j:= j+1; |
||
Элемен т найден . |
1 |
mj- адрес из |
||||
|
|
|
|
поля ссы лки; |
||
|
|
|
|
|
|
|
|
Конец |
|
|
|
|
|
Системное Программное Обеспечение
Результаты сравнения
Метод простого рехэширования:
–коллизий 74;
–сравнений 19;
Метод цепочек:
–коллизий 59;
–сравнений 3.
Системное Программное Обеспечение