Федеральное Агентство образования РФ
Государственное образовательное учреждение
высшего профессионального образования
Владимирский государственный университет
Кафедра вычислительной техники
Пояснительная записка
к курсовой работе
по дисциплине
«системное программное обеспечение»
Разработка компилятора
c языка Pascal на язык Assembler
выполнил:
студент гр. ИВТ-302
Бережной А.М.
Проверил:
Лобачёв Г.А.
Владимир 2004
Содержание:
1. Введение 2. Цели и требования 3. Внешний проект 4. Проект архитектуры 5. Реализация 6. Заключение Список литературы Приложения
1. Введение
В данной курсовой работе необходимо разработать компилятор языка высокого уровня.
Всякий компилятор является составной частью системного программного обеспечения. Основное назначение компиляторов — служить для разработки новых прикладных программ с помощью языков высокого уровня.
Любая программа, как системная, так и прикладная проходит этапы жизненного цикла, начиная от проектирования и вплоть до внедрения и сопровождения. А компиляторы — это средства, служащие для создания программного обеспечения на этапах кодирования, тестирования и отладки.
Однако, сам по себе компилятор не решает полностью всех задач, связанных с разработкой новой программы. Средств только лишь компилятора недостаточно для того, чтобы обеспечить прохождение программой указанных этапов жизненного цикла. Поэтому компиляторы — это программное обеспечение, которое функционирует в тесном взаимодействии с другими техническими средствами.
Работая с любой системой программирования, следует помнить, что основным ее модулем всегда является компилятор. Именно технические характеристики компилятора, прежде всего, влияют на эффективность результирующих программ, порождаемых системой программирования.
2. Цели и требования
Целью выполнения данной курсовой работы – формирование представления о процессе компиляции, его стадиях и возможных вариантах реализации.
Исходные данные:
Входной язык — PASCAL
Выходной язык — Assembler
Язык реализации — Visual C++ 6.0
3.Внешний проект
Компиляция происходит с использованием следующей грамматики:
Программа:
тело:
Составной оператор
раздел описаний:
описание метки
метка
описание переменной
метка:
идентификатор:
Составной оператор:
оператор:
оператор присваивания:
оператор if
оператор goto
выражение
Оператор writeln:
Структура генерируемого ассемблерного файла следующая:
.model small
.stack 128
.data
описание переменных
.code
код программы
Список ошибок компиляции:
VAR_NOT_FOUND - не найдено ключевое слово var в начале программы
TOO_LONG_STRING - слишком длинная строка
UNRESOLVED_ID_NAME – неразрешённое имя идентификатора
UNRESOLVED_TYPE – неразрешённый тип
TOO_LONG_IDENTIFIER_NAME – слишком длинное имя идентификатора
NOT_EXPECTED – ожидался символ ‘;’
NOT_EXPECTED2 - ожидался символ ‘:’
NOT_EXPECTED3 - ожидался символ ‘)’
UNKNOWN_SENTENSE – неизвестный оператор
INVALID_COMPARE – неверная функция сравнения
THEN_EXPECTED – ожидалось ключевое слово then
UNDECLARED_ID – необъявленный идентификатор
основные модули:
compiler.cpp — модуль с основной программой; содержит все функции необходимые для компиляции
compiler.h – содержит объявления функций и констант
error.h — функция обработки ошибок.
IdTableElement.h — класс элемента таблицы идентификаторов.
list.h — обобщённый класс связного списка.