- •Содержание
- •1 Таблица идентификаторов
- •1.1 Исходные данные
- •1.2 Назначение таблиц идентификаторов
- •1.3 Метод цепочек
- •1.4 Метод рехеширования с псевдослучайным числом
- •1.5 Результаты
- •2 Проектирование лексического анализатора
- •2.1 Исходные данные
- •2.2 Принципы работы лексического анализатора
- •2.3 Схема распознавателя
- •2.4 Результаты
- •3 Построение дерева вывода
- •3.1 Исходные данные
- •3.2 Синтаксический анализатор
- •3.3 Результаты
Содержание
|
Лист |
Введение |
2 |
1 Организация таблицы идентификаторов |
3 |
1.1 Исходные данные |
3 |
1.2 Назначение таблиц идентификаторов |
3 |
1.3 Метод цепочек |
3 |
1.4 Метод бинарного дерева |
7 |
1.5 Результаты |
9 |
2 Проектирование лексического анализатора |
10 |
2.1 Исходные данные |
10 |
2.2 Принципы работы лексических анализаторов |
10 |
2.3 Схема распознавателя |
11 |
2.4 Результаты |
12 |
3 Построение дерева вывода |
13 |
3.1 Исходные данные |
13 |
3.2 Синтаксический анализатор |
13 |
3.3 Результаты |
17 |
Заключение |
19 |
Список использованных источников |
20 |
Приложение А. Граф состояний лексического анализатора |
21 |
Приложение Б. Матрица операторного предшествования |
22 |
Приложение В. Исходный текст программы |
23 |
Введение
Целью данной курсовой работы являлось изучение составных частей, основных принципов построения и функционирования компиляторов, практическое освоение методов построения простейших компиляторов для заданного входного языка.
Для выполнения курсовой работы использована среда программной разработки Microsoft Visual Studio.NET 2003 с дополнительно интегрированной библиотекой классов Trolltech Qt v4.0.1.
1 Таблица идентификаторов
1.1 Исходные данные
Необходимо написать программу, которая получает на входе набор идентификаторов, организует таблицу по заданному методу и позволяет осуществить многократный поиск идентификатора в этой таблице. Список идентификаторов считать заданным в виде текстового файла.
По выданному варианту задания соответствует организация таблицы идентификаторов по методу цепочек и рехеширование с использованием псеводслучайных чисел.
1.2 Назначение таблиц идентификаторов
Проверка правильности семантики кода требуют знания характеристик идентификаторов, используемых в программе на исходном языке. Эти характеристики выясняются из описаний и из того, как идентификаторы используются в программе и накапливаются в таблице символов или таблице идентификаторов. Любая таблица символов состоит из набора полей, количество которых равно числу идентификаторов программы. Каждое поле содержит в себе полную информацию о данном элементе таблицы. Под идентификаторами подразумеваются константы, переменные, имена процедур и функций, формальные и фактические параметры.
В моей курсовой работе таблица идентификаторов будет применяться для хранения информации об используемых переменных.
1.3 Метод цепочек
Метод цепочек работает по следующему алгоритму:
Шаг 1. Во все ячейки хеш-таблицы поместить пустое значение, таблица идентификаторов пуста, переменная FreePtr (указатель первой свободной ячейки) указывает на начало таблицы идентификаторов; i:=1.
Шаг 2. Вычислить значение хеш-функции ni для нового элемента Ai. Если ячейка хеш-таблицы по адресу ni пустая, то поместить в нее значение переменной FreePtr и перейти к шагу 5; иначе перейти к шагу 3.
Шаг 3. Положить j:=1, выбрать из хеш-таблицы адрес ячейки таблицы идентификаторов mj и перейти к шагу 4.
Шаг 4. Для ячейки таблицы идентификаторов по адресу mj проверить значение поля ссылки. Если оно пустое, то записать в него адрес из переменной FreePtr и перейти к шагу 5; иначе j:=j+1, выбрать из поля ссылки адрес mj и повторить шаг 4.
Для наглядности на рисунке 1 изображена блок-схема алгоритма.
Шаг 5. Добавить в таблицу идентификаторов новую ячейку, записать в нее информацию для элемента Ai (поле ссылки должно быть пустым), в переменную FreePtr поместить адрес за концом добавленной ячейки. Если больше нет идентификаторов, которые надо разместить в таблице, то выполнение алгоритма закончено, иначе i:=i+1 и перейти к шагу 2.
Поиск элемента в таблице идентификаторов, организованной таким образом, будет выполнятся по следующему алгоритму:
Шаг 1. Вычислить значение хэш-функции n для A. Если ячейка хэш-таблицы по адресу n пустая, то элемент не найден и алгоритм завершен, иначе выбрать из хэш-таблицы адрес ячейки таблицы идентификаторов m.
Шаг 2. Сравнить имя элемента в ячейке таблицы идентификатов по адресу m с именем искомого элемента А. Если они совпадут, то искомый элемент найден, и алгоритм завершон, иначе перейти к шагу 3
Шаг 3. Проверить значение поля ссылки в ячейке таблицы идентификаторов по адресу m. Если оно пустое, то искомый элемент не найден и алгоритм завершенж иначе выбрать из поля ссылки адрес m и перейти к шагу 2. Для наглядности на рисунке 2 изображена блок-схема.
Рисунок 1 – Блок-схема организации таблицы идентификаторов по алгоритму «метод цепочек».
Рисунок 2 – Блок-схема поиска элемента в таблице идентификатора организованной по алгоритму «метод цепочек»