
- •Содержание
- •Введение
- •1 Организация таблицы идентификаторов
- •1.1 Исходные данные
- •1.2 Назначение таблицы идентификаторов
- •1.3 Метод бинарного дерева
- •1.4 Метод цепочек
- •2.2 Назначение лексического анализатора
- •2.3 Схема распознавателя
- •2.4 Результат выполнения программы
- •2.5 Вывод
- •3 Построение дерева вывода
- •3.1 Исходные данные
- •3.2 Синтаксический анализатор
- •3.3 Таблицы предшествования
- •3.4 Результат выполнения программы
- •3.5 Вывод
- •Заключение
- •Список литературы
- •Приложение а – Листинги программы
Содержание
Лист
Содержание 1
Введение 2
1 Организация таблицы идентификаторов 3
1.1 Исходные данные 3
1.2 Назначение таблицы идентификаторов 3
1.3 Метод бинарного дерева 3
1.4 Метод цепочек 5
6
1.6 Вывод 6
2 Проектирование лексического анализатора 7
2.1 Исходные данные 7
2.2 Назначение лексического анализатора 7
2.3 Схема распознавателя 8
2.4 Результат выполнения программы 9
2.5 Вывод 10
3 Построение дерева вывода 11
3.1 Исходные данные 11
3.2 Синтаксический анализатор 12
3.3 Таблицы предшествования 13
3.4 Результат выполнения программы 16
3.5 Вывод 16
Заключение 17
Список литературы 18
Приложение А – Листинги программы 19
Введение
Компилятор – программный модуль, задачей которого является перевод программы, написанной на одном из языков программирования (исходный язык) в программу на язык ассемблера или язык машинных команд.
Большинство компиляторов переводят программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен компьютером.
Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компиляторов, практическое освоение методов построения составных частей компилятора для заданного входного языка.
Курсовая работа заключается в создании отдельных частей компилятора заданного языка.
В первой части работы ставится задача разработать программу, которая получает на входе набор идентификаторов, организует таблицу по заданному методу и позволяет осуществить многократный поиск идентификатора в этой таблице. Программа должна сообщать среднее число коллизий и среднее количество сравнений, выполняемых для поиска идентификатора.
Во второй части работы требуется разработать программу, которая выполняет лексический анализ входного текста по заданной грамматике и порождает таблицу лексем с указанием их типов и значений.
В третьей части работы требуется разработать программу, которая на основании таблицы лексем выполняет синтаксический разбор текста по заданной грамматике с построением дерева разбора.
Результатами курсовой работы являются программная реализация заданного компилятора и пояснительная записка, оформленная в соответствии с требованиями стандартов и задания на курсовую работу.
В качестве среды разработка для реализации программы использован язык программирования C++и система программированияBorland CBuilder 6.
1 Организация таблицы идентификаторов
1.1 Исходные данные
На входе имеется набор идентификаторов, которые организуются в таблицу по одному из двух методов (метод бинарного дерева и метод цепочек). Необходима возможность осуществления многократного поиска идентификатора в этой таблице. Список идентификаторов считать заданным в виде текстового файла. Длина идентификатора ограничена 32 символами.
Первый метод организации таблицы – бинарное дерево. Второй – метод цепочек.
Требуется, чтобы программа сообщала число коллизий и количество сравнений, выполняемых при поиске идентификатора.
1.2 Назначение таблицы идентификаторов
Проверка правильности семантики и генерация кода требуют знания характеристик идентификаторов, используемых в программе на исходном языке. Эти характеристики выясняются из описаний и из того, как идентификаторы используются в программе и накапливаются в таблице символов или таблице идентификаторов. Любая таблица символов состоит из набора полей, количество которых равно числу идентификаторов программы. Каждое поле содержит в себе полную информацию о данном элементе таблицы. Под идентификаторами подразумеваются константы, переменные, имена процедур и функций, формальные и фактические параметры.
В данной работе мы сравним два метода организации таблицы идентификаторов: метод бинарного дерева и метод цепочек.