Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект2 / Пояснительная Записка (v2.0).doc
Скачиваний:
47
Добавлен:
02.05.2014
Размер:
1.52 Mб
Скачать

1.3 Метод простого рехэширования

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

(1)

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

(2)

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

Блок-схема метода простого рехэширования представлена на рисунке 1.1.

Рис. 1.1 – Блок-схема метода простого рехэширования; а) – Блок-схема алгоритма простого рехэширования;б) – Блок-схема функции поиска идентификатора;

в) – Блок-схема функции добавления идентификатора

1.4 Метод бинарного дерева

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

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

Блок-схема метода бинарного дерева представлена на рисунке 1.2

Рис. 1. 1 – Блок-схема метода бинарного дерева; а) – Блок-схема алгоритма метода бинарного дерева;б) – Блок-схема функции добавления идентификатора;

в) – Блок-схема функции поиска идентификатора

1.5 Результат выполнения программы

Рис. 1.3 – Результаты сравнения методов организации таблицы идентификаторов

Для сравнения методов организации таблицы идентификаторов был разработан модуль, иллюстрирующий их работу.

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

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

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

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

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

Предусмотрены следующие варианты операторов входной про­граммы:

        • оператор присваивания вида <переменная>:=<выражение>;

        • условный оператор вида if <выражение>then<оператор>

        • либо if<выражение>then<оператор>else<оператор>;

        • составной оператор вида begin...end;

        • оператор цикла while<выражение>do<оператор> ;

        • операции сложения (+), вычитания (-), инкремент (++);

        • операции сравнения «меньше» (<), «больше» (>), «равно» (=);

        • логические операции and, or, not;

        • операндами в выражениях могут выступать идентификаторы и константы;

        • все идентификаторы должны воспри­ниматься как переменные.