- •Введение.
- •1 Задание на проектирование
- •2 Цели и требования
- •3 Внешний проект
- •3.1 Входные и выходные данные
- •3.2 Определение синтаксиса языка
- •3.3 Общая структура проекта
- •3.4 Структура выходного файла
- •3.5 Организация листинга
- •4 Проект архитектуры
- •4.1 Структуры данных
- •4.2 Алгоритмы основных функций
- •4.3 Схема вызовов процедур и функций
- •4.4 Организация процедуры компиляции
- •4.5 Спецификация основных процедур и функций
- •4.6 Обработка ошибок
- •5 Реализация
- •5.1 Тестирование
- •5.2 Документация для пользователя
Федеральное агентство образования Р.Ф.
Государственное образовательное учреждение высшего профессионального образования ВлГУ
Кафедра ВТ
Курсовая работа
по дисциплине
Системное программное обеспечение
Разработка компилятора с языка Паскаль
на язык Ассемблера
Выполнил:
ст. гр. ИВТ-102
Парневич И.В.
Принял:
Маскеев С.В.
Владимир, 2004
Введение.
С самого начала развития вычислительной техники человека, пытающегося практически использовать вычислительную машину, раздражала необходимость общаться с ней на ее собственном языке. Для вычислительной машины команды и данные — это хранящиеся в ее памяти наборы двоичных битов. Для человека такое представление информации является трудным для восприятия и понимания. Происходящая непрерывная эволюция в области взаимодействия человека с компьютером привела к появлению сложных и изощренных языковых средств современного математического обеспечения.
Можно указать три главных фактора, обусловливающие и стимулирующие развитие языков программирования. Эти факторы — мнемоника, парадигма (стереотип) и управление данными. Большинство наиболее употребительных общецелевых языков обладает свойствами, отражающими влияние всех этих факторов, но во многих специализированных языках основное внимание было уделено одному из них.
Мнемоника — это возможность подстановки осмысленных для человека символов и фраз в конструкциях машинного языка.
Сущность парадигмы заключается в объединении нескольких внешне не связанных команд в одну группу, для программиста логически более завершенную и содержательно более осмысленную. Подпрограммы, функции и разного рода макро возможности позволяют программисту строить сложные стереотипы. Возможность парадигмы в языках высокого уровня позволяет увеличивать сложность конструируемых систем.
Последний фактор, сильно влияющий на языки программирования,—это структура данных. Основной структурой данных большинства вычислительных машин является линейный массив единиц памяти, состоящих из байтов.
Рассматриваемые единицы памяти характеризуются еще так называемыми абсолютными адресами; это означает, что каждая единица памяти обладает одним приписанным только ей именем. К сожалению, этот тип структуры данных весьма ограничен и ни в коей мере не отражает всего разнообразия типов данных, которым, пользуются программисты. Таким образом, имеется логическая структура данных, т.е. структура, используемая программистом при разработке своего алгоритма, и физическая структура данных, т.е. представление данных непосредственно в памяти машины.
Теперь, когда программист стал обладателем языка высокого уровня, нужно сделать так, чтобы машина смогла прочесть написанную на этом языке программу и понять, какую последовательность машинных команд эта программа обозначает. Как принято говорить, программа должна пройти этап компиляции. Компилятором называется системная программа, выполняющая преобразование программы, написанной на одном алгоритмическом языке, в программу на языке, близком к машинному, и в определенном смысле эквивалентную первой.
1 Задание на проектирование
Разработать транслятор языка высокого уровня Pascal на язык ассемблера. Реализовать следующие конструкции входного языка:
арифметические операции +, –, *, div, mod;
скобочные выражения;
оператор присваивания;
составной оператор;
пустой оператор;
Дополнительно были реализованы следующиее конструкции:
целый тип данных;
функции, работа с функциями, выход из них, передача данных по указателям;