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

Содержание

Лист

Содержание 1

Введение 2

1 Организация таблицы идентификаторов 3

1.1 Исходные данные 3

1.2 Назначение таблицы идентификаторов 3

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

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

6

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

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

2.2 Назначение лексического анализатора 7

2.3 Схема распознавателя 7

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

3 Построение дерева вывода 11

3.1 Исходные данные 11

3.2 Синтаксический анализатор 12

3.3 Таблицы предшествования 13

Матрица предшествования исходной грамматики 15

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

3.5 Вывод 17

Заключение 18

Список литературы 19

Приложение А – Листинги программы 20

Введение

Компилятор – программный модуль, задачей которого является перевод программы, написанной на одном из языков программирования (исходный язык) в программу на язык ассемблера или язык машинных команд.

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

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

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

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

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

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

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

В качестве среды разработка для реализации программы использован язык программирования C++и система программированияBorland CBuilder 6.

1 Организация таблицы идентификаторов

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

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

Первый метод организации таблицы – простое рехэширование. Второй – метод бинарное дерево.

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

1.2 Назначение таблицы идентификаторов

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