- •Лабораторная работа № 1 Работа с таблицей символов
- •Краткие теоретические сведения Простейшие способы организации таблицы идентификаторов
- •Принципы работы хеш-функций
- •Построение таблиц идентификаторов на основе хеш-функций
- •Построение таблиц идентификаторов по методу цепочек
- •Комбинированные способы построения таблиц идентификаторов
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты заданий
- •Рекомендуемая литература
- •Лабораторная работа № 2 Проектирование лексического анализатора
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты заданий
- •Рекомендуемая литература
- •Лабораторная работа № 3 Построение простейшего дерева вывода
- •Краткие теоретические сведения
- •Распознавание цепочек кс-языков
- •Грамматики предшествования
- •Алгоритм “сдвиг-свертка” для грамматик простого и операторного предшествования
- •Общий алгоритм работы синтаксического анализатора
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты исходных грамматик
- •Варианты заданий
- •Рекомендуемая литература
- •Лабораторная работа № 4 Генерация и оптимизация объектного кода
- •Краткие теоретические сведения
- •Алгоритм генерации объектного кода по дереву вывода
- •Построение ассемблерного кода по дереву вывода
- •Построение списка триад по дереву вывода.
- •Оптимизация объектного кода методом свертки
- •Оптимизация объектного кода методом исключения лишних операций
- •Общий алгоритм генерации и оптимизации объектного кода
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты заданий
- •Рекомендуемая литература
- •Лабораторная работа № 5 Определения объема памяти для структур данных
- •Краткие теоретические сведения Принципы распределения памяти
- •Виды переменных и областей памяти Распределение памяти для переменных скалярных типов
- •Распределение памяти для сложных структур данных
- •Выравнивание границ областей памяти
- •Виды областей памяти. Статическое и динамическое связывание Глобальная и локальная память
- •Статическая и динамическая память
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты исходных грамматик
- •Варианты заданий
- •Рекомендуемая литература
- •Лабораторная работа № 6 Разработка простейшего приложения на основе технологии «клиент-сервер»
- •Краткие теоретические сведения Методы организации распределенных вычислений
- •Технология odbc
- •Технологии ole db и ado
- •Поддержка технологий доступа к субд в системах программирования
- •Проблемы и недостатки архитектуры «клиент-сервер»
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты заданий
- •Рекомендуемая литература
Комбинированные способы построения таблиц идентификаторов
Выше в примере была рассмотрена весьма примитивная хеш-функция, которую никак нельзя назвать удовлетворительной. Хорошая хеш-функция распределяет поступающие на ее вход идентификаторы равномерно на все имеющиеся в распоряжении адреса, так что коллизии возникают не столь часто. Существует большое множество хеш-функций. Каждая из них стремится распределить адреса под идентификаторы по своему алгоритму, но, как было показано выше, идеального хеширования достичь невозможно.
То, какой конкретно метод применяется в компиляторе для организации таблиц идентификаторов, зависит от реализации компилятора. Один и тот же компилятор может иметь даже несколько разных таблиц идентификаторов, организованных на основе различных методов.
Как правило, применяются комбинированные методы. В этом случае, как и для метода цепочек, в таблице идентификаторов организуется специальное дополнительное поле ссылки. Но в отличие от метода цепочек оно имеет несколько иное значение. При отсутствии коллизий для выборки информации из таблицы используется хеш-функция, поле ссылки остается пустым. Если же возникает коллизия, то через поле ссылки организуется поиск идентификаторов, для которых значения хеш-функции совпадают по одному из рассмотренных выше методов: неупорядоченный список, упорядоченный список или же бинарное дерево. При хорошо построенной хеш-функции коллизии будут возникать редко, поэтому количество идентификаторов, для которых значения хеш-функции совпали, будет не столь велико. Тогда и время поиска одного среди них будет незначительным (в принципе, при высоком качестве хеш-функции подойдет даже перебор по неупорядоченному списку).
Такой подход имеет преимущество по сравнению с методом цепочек, поскольку не требует использования промежуточной хеш-таблицы. Недостатком метода является необходимость работы с динамически распределяемыми областями памяти. Эффективность такого метода, очевидно, в первую очередь зависит от качества применяемой хеш-функции, а во вторую — от метода организации дополнительных хранилищ данных.
Хеш-адресация — это метод, который применяется не только для организации таблиц идентификаторов в компиляторах. Данный метод нашел свое применение и в операционных системах, и в системах управления базами данных.
Порядок выполнения работы
Получить вариант задания у преподавателя.
Подготовить и защитить отчет.
Написать и отладить программу на ЭВМ.
Сдать работающую программу преподавателю.
Требования к оформлению отчета
Отчет по лабораторной работе должен содержать следующие разделы:
Задание по лабораторной работе.
Схему организации хеш-таблицы (в соответствии с вариантом задания).
Описание алгоритма поиска в хеш-таблице (в соответствии с вариантом задания).
Текст программы (оформляется после выполнения программы на ЭВМ по согласованию с преподавателем).
Выводы по проделанной работе.
Основные контрольные вопросы
Что такое таблица символов и для чего она предназначена?
Какая информация может хранится в таблице символов?
Какие цели преследуются при организации таблицы символов?
Какими характеристиками могут обладать константы, переменные?
Какие существуют способы организации таблиц символов?
В чем заключается алгоритм логарифмического поиска? Какие преимущества он дает по сравнению с простым перебором и какие он имеет недостатки?
Расскажите о древовидной организации таблиц идентификаторов. В чем ее преимущества и недостатки?
В чем суть хеш-адресации ?
Что такое хеш-функции и для чего они используются?
Расскажите о преимуществах и какие недостатках организации таблицы идентификаторов с помощью хеш-функции.
Что такое коллизия? Почему она происходит? Можно ли полностью избежать коллизий?
Что такое рехеширование? Какие методы рехеширования существуют?
В чем заключается метод цепочек ?
Как могут быть скомбинированы различные методы организации хеш-таблиц ?
