Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
37
Добавлен:
02.05.2014
Размер:
810 Кб
Скачать
☆

1.4. Простой список

Простой список является простейшим способом организации ТИ. Он состоит в том, что добавление элементов ведется в порядке их поступления. Поиск в этом случае требует сравнения с каждым элементом ТИ, пока не будет найден подходящий. Для ТИ, содержащей n элементов, в среднем будет выполнено n/2 сравнений. Если n велико, то способ не является эффективным.

Поскольку при заполнении таблицы идентификаторов основными операциями являются добавление элемента в таблицу и поиск элемента в ней, на рис. 3 и рис. 4 представлены блок-схемы этих операций для рассматриваемого метода.

Рис. 3. Блок-схема добавления элемента в таблицу идентификаторов в простой список

Рис. 4. Блок-схема алгоритма поиска элемента в таблицу идентификаторов, организованной по методу простого списка

1.5. Результаты

Для сравнения метода простого рехеширования и простого списка выбран текстовый файл, содержащий 20 строк.

В результате работы программы получены следующие данные, которые представлены в табл. 1.

Таблица 1

Метод простого

рехеширования

Простой список

Коллизий

5

-

Сравнений

3

17

Среднее число сравнений

0,058

0,8571

На основе полученных результатов можно сделать следующие вывод ы.

Недостатки метода простого рехеширования:

 элементы могут попадать в ячейки с адресами, которые потом будут совпадать со значениями хеш-функции, что приводит к возникновению дополнительных коллизий;

 среднее время на размещение элемента и на поиск элемента в таблице зависит от заполненности таблицы идентификаторов и качества используемой хеш-функции;

 требование неполного заполнения таблицы ведет к неэффективному использованию объема доступной памяти.

Достоинством метода простого рехеширования является то, что он позволяет добиться неплохих результатов для эффективного поиска элемента в таблице (лучших, чем метод бинарного дерева).

Достоинства простого списка:

 нет необходимости заполнять пустыми значениями таблицу идентификаторов (это можно сделать только для хеш-таблицы), то есть память используется более экономно;

 элементы не могут попадать в ячейки с адресами, которые потом будут совпадать со значениями хеш-функции, то есть коллизии не будут возникать;

 время на размещение элемента и на поиск элемента в таблице не зависит от среднего числа коллизий, возникающих при вычислении хеш-функции.

Недостатком метода простого списка является большое время поиска.

Простое рехеширования является более эффективным методом организации таблицы идентификаторов. Именно он и будет в дальнейшем использован для хранения информации об идентификаторах в курсовой работе.

2. Проектирование лексического анализатора

2.1. Исходные данные

Для выполнения данной части курсовой работы требуется написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов и значений. Текст на входном языке задан в виде текстового файла. Программа должна выдавать сообщения о наличие во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа. Программа должна допускать наличие комментариев неограниченной длины во входном файле.

В соответствии с заданием должны распознаваться:

 ключевые слова : «prog», «end.», «begin», «end», «if», «then», «else», «while», «do», «and», «or», «not»;

 идентификаторы: любые последовательности латинских символов и цифр; идентификатор должен начинаться с символа;

 константы: двоичное представление числа;

 знаки операций: «=», «<», «>», «–», «+», «*», «/»;

 оператор присваивания: «:=»;

 разделитель: «;»;

 комментарии, заключенные в «{», «}».