- •Содержание
- •1 Задание
- •2 Таблица идентификаторов
- •2.1 Исходные данные
- •2.2 Назначение таблиц идентификаторов
- •2.3 Метод цепочек
- •2.4 Метод бинарного дерева
- •2.5 Результаты
- •3 Проектирование лексического анализатора
- •3.1 Исходные данные
- •3.2 Принципы работы лексического анализатора
- •3.3 Схема распознавателя
- •3.3 Результаты
- •4 Построение дерева вывода
- •4.1 Исходные данные
- •4.2 Синтаксический анализатор
- •4.3 Результаты
- •5 Генерация и оптимизация объектного кода
- •5.1 Исходные данные
- •5.2 Построение списка триад
- •5.3 Генерация ассемблерного кода
- •5.4 Результаты
- •6 Описание работы программы
- •6.1 Реализация таблицы идентификаторов
- •6.2 Программная реализация лексического анализатора
- •6.3 Программная реализация синтаксического анализатора
- •6.4 Реализация генерации и оптимизации объектного кода
Содержание
|
Лист |
Введение |
2 |
1 Задание |
3 |
2 Организация таблицы идентификаторов |
6 |
2.1 Исходные данные |
6 |
2.2 Назначение таблиц идентификаторов |
6 |
2.3 Метод цепочек |
7 |
2.4 Метод бинарного дерева |
7 |
2.5 Результаты |
7 |
3 Проектирование лексического анализатора |
10 |
3.1 Исходные данные |
10 |
3.2 Принципы работы лексических анализаторов |
10 |
3.3 Схема распознавателя |
11 |
3.4 Результаты |
12 |
4 Построение дерева вывода |
14 |
4.1 Исходные данные |
14 |
4.2 Синтаксический анализатор |
14 |
4.3 Результаты |
18 |
5 Генерация и оптимизация объектного кода |
20 |
4.1 Исходные данные |
20 |
4.2 Построение списка триад |
20 |
4.3 Генерация ассемблерного кода |
21 |
4.4 Результаты |
22 |
Заключение |
23 |
Список использованных источников |
24 |
Приложение А. Исходный текст программы |
|
Введение
Традиционная архитектура компьютера (архитектура фон-Неймана) остается неизменной и преобладает в современных вычислительных системах. Столь же неизменными остаются и базовые принципы, на основе которых строятся средства разработки программного обеспечения для компьютеров – трансляторы, компиляторы и интерпретаторы.
С одной стороны, компьютеры традиционной архитектуры умеют понимать только язык машинных команд. С другой стороны, разработчики не имеют возможности создавать прикладные и системные программы на уровне машинных кодов – слишком велик процент ошибок и непомерно велика трудоемкость такой работы. Поэтому давно возникла потребность в появлении "переводчиков" с различных языков программирования (языков ассемблера и языков высокого уровня) на язык машинных кодов. Такими переводчиками стали трансляторы. Есть и более узкое понятие подобного рода – "компилятор".
В настоящее время существует огромное количество различных языков программирования. В курсовой работе использованы принципы и технологии, лежащие в основе всех современных языков программирования, поскольку все эти языки построены на одном фундаментальном базисе, который составляет теория формальных языков и грамматик.
На этих принципах и технологиях построены все средства разработки, которые в настоящее время являются не просто трансляторами и компиляторами, а комплексами, представляющими собой системы программирования.
1 Задание
Курсовая работа заключается в создании компилятора с заданного подмножества языка Паскаль с незначительными модификациями и упрощениями (полное описание входного и выходного языков дано далее в задании для каждого варианта). Результатами курсовой работы являются программная реализация заданного компилятора и пояснительная записка, оформленная в соответствии с требованиями ГОСТ, стандартов Университета и задания на курсовую работу.
Компилятор рекомендуется построить из следующих составных частей:
лексический анализатор;
синтаксический анализатор;
оптимизатор;
генератор результирующего кода.
Для построения компилятора рекомендуется использовать методы, освоенные в ходе выполнения лабораторных работ по курсу «Системное программное обеспечение».
Входной язык компилятора должен удовлетворять следующим требованиям:
входная программа начинается ключевым словом program и заканчивается ключевым словом end;
входная программа может быть разбита на строки произвольным образом, все пробелы и переводы строки должны игнорироваться компилятором;
текст входной программы может содержать комментарии любой длины, которые должны игнорироваться компилятором (вид комментария задан в варианте задания);
входная программа должна представлять собой единый модуль, содержащий линейную последовательность операторов, вызовы процедур и функций не предусматриваются;
должны быть предусмотрены следующие варианты операторов входной программы:
оператор присваивания вида <переменная>:=<выражение>;
условный оператор вида if <выражение> then <оператор>, либо if <выражение> then <оператор> else <оператор>;
составной оператор вида begin … end;
оператор цикла, предусмотренный вариантом задания;
выражения в операторах могут содержать следующие операции (минимум):
арифметические операции сложения (+) и вычитания (-);
операции сравнения меньше (<), больше (>), равно (=);
логические операции «и» (and), «или» (or), «нет» (not);
дополнительные арифметические операции, предусмотренные вариантом задания;
операндами в выражениях могут выступать идентификаторы (переменные) и константы (тип допустимых констант указан в варианте задания);
все идентификаторы, встречающиеся в исходной программе, должны восприниматься как переменные, имеющие тип, заданный в варианте задания (предварительное описание идентификаторов в исходной программе не требуется);
Приоритет операций исполнитель работы должен выбрать самостоятельно (приоритет операций учитывается в грамматике входного языка). Для изменения приоритета операций должны использоваться круглые скобки.
В качестве выходного (результирующего) языка должен использоваться язык ассемблера процессоров типа Intel 80x86 в модификации встроенного языка ассемблера компилятора Pascal производства фирмы Borland.
Дополнительные условия, соответствующие варианту задания:
– дополнительные арифметические операции: сдвиги влево (<<) и вправо (>>);
– оператор цикла входного языка: repeat <оператор> until <выражение>;
– оптимизация: исключение лишних операций;
– тип данных: Word;
– тип комментария: комментарий в круглых скобках со «звездочкой»: (*…*).
Для выполнения курсовой работы использована среда программной разработки Microsoft Visual Studio .NET 2003 (язык C++) с дополнительно установленной библиотекой классов Trolltech Qt v4.0.1.