 
        
         
Курсовой проект по СПО
«Разработка отдельных фаз компиляции для заданного входного языка»
Выполнила:
студент группы УТС-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.
Системное Программное Обеспечение
