Разработка однопроходного компилятора - онлайн-чтение

 

 


Страница 1 из 10

Оглавление


Введение

Расчёт варианта задания

Разработка контрольного примера

Описание используемых директив и команд ассемблера

Выбор варианта построения ассемблера, описание алгоритмов и таблиц

Листинг программы

Алгоритм работы программной реализации разрабатываемого компилятора

Заключение



Введение


Основной целью курсовой работы является создание и изучение объектного файла. Создаваемый объектный файл должен восприниматься линковщиком и преобразовываться в исполняемый файл (COM или EXE). Перевод исходной программы в её объектное представление осуществляет транслятор, поэтому его программная реализация также является целью курсовой работы.

Транслятор - это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.

С точки зрения принципа работы транслятор выступает как переводчик: преобразует предложения входного языка в эквивалентные им предложения выходного языка. Кроме того, само слово «транслятор» означает «переводчик».

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.

Язык, на котором представлена входная программа, называется исходным языком, а сама программа - исходным кодом. Выходной язык называется целевым языком или объектным кодом.

Трансляторы подразделяют:

Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.

Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.

Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.

Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.

Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.

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

Обратный. Для программы в машинном коде выдаёт эквивалентную программу на каком-либо языке программирования.

Процесс компиляции состоит из двух основных этапов ? анализа и синтеза (рис. 1).

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

На этапе синтеза из внутреннего представления программы и информации из таблицы идентификаторов, получается результирующая объектная программа.

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

Лексический анализ. Эту часть компилятора выполняет сканер, который читает литеры программы (символы) на исходном языке и строит из них слова (лексемы) исходного языка. На входе сканера (лексического анализатора) текст исходной программы, выходная информация передаётся для дальнейшей обработки на этап синтаксического разбора.

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

Рис. 1. Функции основных фаз компиляции:


Семантический анализ ? это часть компилятора, проверяющая часть текста исходной программы с точки зрения семантики входного языка.

Подготовка к генерации кода ? на этой фазе компилятор выполняет предварительные действия, непосредственно связанные с синтезом текста результирующей программы: идентификация элементов языка, распределение памяти и т.п. Эта подготовка ещё не ведёт к порождению текста на выходном языке.

Генерация кода ? это фаза, на которой непосредственно порождаются команды, составляющие предложения выходного языка и текст результирующей программы в целом. Фаза генерации кода основная на этапе синтеза результирующей программы. Кроме этого, генерация обычно включает в себя и оптимизацию. Оптимизация ? это процесс, связанный с обработкой уже порождённого текста и оказывающий существенное влияние на качество и эффективность результирующей программы.

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

Предметы

Все предметы »

 

 

Актуальные Курсовые работы (Теория) по программному обеспечению, программированию