*
*


CAPTCHA Image   Reload Image
X

Создание компилятора

курсовые работы, программирование

Объем работы: 115 стр.

Год сдачи: 2011

Стоимость: 2000 руб.

Просмотров: 709

 

Не подходит работа?
Узнай цену на написание.

Оглавление
Введение
Содержание
Заключение
Заказать работу
СОДЕРЖАНИЕ
1 ВВЕДЕНИЕ 3
2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 5
3. ОПИСАНИЕ ПРОГРАММЫ 6
3.1 Описание входного алфавита 6
3.2 Описание грамматических правил 6
4. ИСПОЛЬЗОВАННЫЕ АЛГОРИТМЫ И СТРУКТУРЫ 8
4.1 Конечный автомат (фаза лексического анализа) 8
4.2 Алгоритм рекурсивного спуска с возвратами (фаза синтаксического анализа) 8
4.3 Представление синтаксического дерева в виде ПОЛИЗ’а (вычисление константных выражений, фаза генерации кода) 8
5. ИСПОЛЬЗОВАННЫЕ ИНСТУМЕНТАЛЬНЫЕ СРЕДСТВА 9
5.1 Использованные средства 9
5.2 Диаграмма классов 10
6. РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ 11
6.1 Входной код 11
6.2 Выходной код 11
7. ПРИМЕРЫ РАБОТЫ ПРОГРАММЫ 13
7.1 Пример 1 13
7.2 Пример 2 14
8. ЗАКЛЮЧЕНИЕ 17
9. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 18
ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ 19
2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
Написание программы-компилятора на языке С++. Программа должна производить трансляцию фрагмента исходного текста на входном языке программирования (C) в эквивалентный ей текст программы на языке ассемблера. Результирующая программа на языке ассемблера должна быть ориентирована на архитектуру x86.
Исходный текст программы на языке C:
int sum(int a, int b);

int i, n = 50, j;
float p;
for(i =0, j = n; i”, “[{FI}]=>[{INIT}]=>{BODYF}=>[{F}]
FI->ZF=>";"
ZF->"int"|"float"=>I=>"("[=>FLIST]=>")"
FLIST->"int"|"float"=>I[=>","=>FLIST]
I->ID1=>ID2
ID1->a-z|”_”
ID2->{a-z|0-9|”_”}*
INIT->DI|DF
DI->"int"=>DLIST=>";"
DLIST->I=>["="=>E][=>","=>DLIST]
DF->"float"=>DLIST=>";"
E->T=>{+-*/=>T}, E->"("=>E=>")"
T->TT|N|PREFDECR|PREFINCR T->"("=>T[+-*/=>T]=>")"
TT->POSTDECR|POSTINCR|I|PARLIST
N->_INT|_FLOAT
_INT->{0-9}+
_FLOAT->_INT=>”.”=>_INT
POSTDECR->I=>"--"
PREFDECR->"--"=>I
POSTINCR->I=>"++"
PREFINCR->"++"=>I
PARLIST->I[=>","=>PARLIST]
BODYF->PRISVLISTBODY|IF|FO
PRISVLISTBODY->PRISVLIST=>";"
PRISVLIST->DECR|INCR|PR
DECR->POSTDECR|PREFDECR
INCR->POSTINCR|PREFINCR
PR->I=>"="=>E
IF->"if"=>"("=>LOGIC=>")"=>BODY
LOGIC->I|N[=>">"|"
1. ВВЕДЕНИЕ
Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.
Компилятор – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера. Таким образом, компилятор является частным случаем транслятора.
Процесс компиляции можно разделить на два основных этапа: анализ и синтез. На этапе анализа выполняется распознавание текста исходной программы, создание и заполнение таблиц идентификаторов и т.д. Результатом его работы служит некоторое внутреннее представление программы, понятное компилятору.
На этапе синтеза на основании внутреннего представления программы и информации, содержащейся в таблице идентификаторов, порождается текст результирующей программы. Результатом этого этапа является объектный код.
Кроме того, в составе компилятора присутствует часть, ответственная за анализ и исправление ошибок.
Этапы анализа и синтеза, в свою очередь, состоят из более мелких этапов, называемых фазами компиляции. Так фазами анализа являются: лексический анализ, синтаксический анализ, семантический анализ.
Этапами синтеза являются: оптимизация, генерация кода, оптимизация полученного кода.
Лексический анализ – это фаза, в которой формируются символы (tokens) входного языка. Лексема (token) – лексическая единица языка. Это структурная единица языка, которая состоит из элементарных символов языка и не содержит в своем составе других лексем.
Задачей фазы лексического анализа или лексического анализатора является переход от последовательности знаков к символам языка (лексем), с которыми в дальнейшем будут работать синтаксическая и семантическая фазы. Наряду с преобразованием последовательности знаков в символы, лексический анализатор также обрабатывает пробелы и удаляет комментарии и любые другие символы, не имеющие смысловой нагрузки для последующих этапов...
8. ЗАКЛЮЧЕНИЕ
В результате работы были достигнуты следующие цели:
1. Программа выполнена на языке программирования C++.
2. Программа производит трансляцию фрагмента исходного текста на входном языке программирования в эквивалентный ей текст программы на языке ассемблера.
3. Результирующая программа на языке ассемблера ориентирована на архитектуру x86.
4. Результирующая программа использует команды сопроцессора для вычисления вещественных выражений.
5. В программе присутствуют лексический и синтаксический анализаторы.
6. Интерфейс к программе-компилятору обеспечивает возможность передачи имени файла с текстом входной программы.
7. В процессе работы программы генерируются сообщения об успехе соответствующей фазы или возникших ошибках.
8. Для обработки ошибок внутри программы использован механизм исключений.
9. В программе в качестве базовых структур данных (массивы, списки, очереди, стеки) использованы контейнерные классы библиотеки STL.
10. Отчет содержит описание решаемой задачи, используемых алгоритмов, код программы, диаграмму классов и выполнен в соответствии с требованиями, предъявляемыми к оформлению курсовых работ.

После офорления заказа Вам будут доступны содержание, введение, список литературы*
*- если автор дал согласие и выложил это описание.

Эту работу можно получить в офисе или после поступления денег на счет в течении 30 минут (проверка денег с 12.00 до 18.00 по мск).
ФИО*


E-mail для получения работы *


Телефон


ICQ


Дополнительная информация, вопросы, комментарии:



CAPTCHA Image
Сусловиямиприбретения работы согласен.

 
Добавить страницу в закладки
Отправить ссылку другу