Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые проекты / курса не мои / ПЗ Берта / пояснительная записка.doc
Скачиваний:
28
Добавлен:
02.05.2014
Размер:
535.04 Кб
Скачать

1.4 Метод цепочек

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

h:=(Ord(S[1])+ Ord(S[2]) ), (2)

где S – входная строка и последнего на входе строку , а врезультате выдавать сумму кодов первого000000000000000000000000000000000000000000.

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

Для решения проблемы коллизий в данной курсовой работе используется метод цепочек.

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

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

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

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

1.5 Результаты

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

Рис. 5 Экранная форма организации таблиц идентификаторов

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

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

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

Входной язык содержит:

  • операторы цикла с перечислением по заданной переменной вида “for <переменная>:=<выражение> to <выражение> do ” либо “ for <переменная>:=<выражение> downto <выражение> do ”;

  • идентификаторы;

  • круглые открывающиеся и закрывающиеся скобки;

  • операторы сравнения “<”, “>”, “=”;

  • оператор присваивания “:=” ;

  • составные операторы “begin” и “end”;

  • условные операторы “if”, “then”, “else”;

  • ключевые слова начала и конца программы “prog” и “end.”;

  • разделяющий знак “;”.

  • логические операторы “not”, “and” и “or”;

  • арифметические операции сложения, вычитания, сдвигов влево и вправо;

  • комментарии любой длины в круглых скобках со звездочками;

  • константы в двоичной форме.

Соседние файлы в папке ПЗ Берта