Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (операторы real, case, записи, указатель (на запись)) - Программирование, компьютеры и кибернетика курсовая работа

Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (операторы real, case, записи, указатель (на запись)) - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (операторы real, case, записи, указатель (на запись))

Последовательность работ при разработке объектно-ориентированных программ. Виды синтаксических анализаторов и способы их применения. Описание алгоритма и анализ результативности работы программы, написанной на языке С, ее константы, переменные и функции.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.


Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«Северо-Кавказский государственный технический университет»
по дисциплине «Программирование на языке высокого уровня»
5. Описание констант, переменных и функций программы
Объектно-ориентированное программирование - это новый способ подхода к программированию. Такое программирование, взяв лучшие черты структурного программирования, дополняет его новыми идеями, которые переводят в новое качество подход к созданию программ.
Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов - отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы.
Объектно-ориентированный язык программирования должен обладать следующими свойствами:
- абстракции - формальное о качествах или свойствах предмета путем мысленного удаления некоторых частностей или материальных объектов;
- инкапсуляции - механизма, связывающего вмести код и данные, которыми он манипулирует, и защищающего их от внешних помех и некорректного использования;
- наследования - процесса, с помощью которого один объект приобретает свойства другого, т.е. поддерживается иерархической классификации;
- полиморфизма - свойства, позволяющего использовать один и тот же интерфейс для общего класса действий.
Разработка объектно-ориентированных программ состоит из следующих последовательных работ:
1. определение основных объектов, необходимых для решения данной задачи;
2. определение закрытых данных (данных состояния) для выбранных объектов;
3. определение второстепенных объектов и их закрытых данных;
4. определение иерархической системы классов, представляющих выбранные объекты;
5. определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;
6. разработка последовательности выражений, которые позволяют решить поставленную задачу;
7. разработка методов, обрабатывающих каждое сообщение;
8. очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;
9. кодирование, отладка, компоновка и тестирование.
Объектно-ориентированное программирование позволяет программисту моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.
1. Ц ели и задачи курсового проекта
Цель данной курсовой работы: выработка у студентов практических навыков по проектированию программ, их отладке и документированию. Выполнение курсового проекта позволяет студенту закрепить полученные знания по дисциплине «Программирование на языке высокого уровня». Написание курсового проекта начинается с разработки технического задания (ТЗ) и завершается составлением отчета, в котором должно содержаться описание всей работы в целом.
Необходимо написать транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си. Рассмотреть операторы real, case, записи, указатель (на запись).
- максимальная устойчивость от ошибок,
- учет некорректность вводимых данных.
- Программа должна транслировать ранее набранный текст на языке Паскаль в текст на языке Си. При этом ввод имени файла производится через программу. При введении неверного имени предоставить возможность повторного ввода.
В программе нам так же необходимо использовать:
При запуске программа спросит имя исходного файла (без расширения), если файл не найден, то запрос будет выполняться до тех пор, пока не будет введено имя существующего файла или до прекращения работы программы. Затем программа выполнит запрос об имени выходного файла и при наличии ошибок в тексте при трансляции выведет на экран номер исходящей строки, где найдена ошибка и саму ошибку. Далее выводится статистика о трансляции кода на экран.
Для запуска программы достаточно запустить откомпилированный файл Project.exe.
К аппаратным ограничения можно отнести процессор с частотой не менее 500 Гц, не менее 32М оперативной памяти.
В консоли после ввода пути и названия файла (разрешение может быть любым) пользователю будет выведено одно из двух возможных сообщений:
В случае номер один запустится специальная подпрограмма обработки текста.
При случае номер два на экран будет выведено предложение повторного ввода названия файла.
Сообщение об ошибке для открытия файла:
К сожалению, файл не удалось открыть. Проверьте правильность имени и попробуйте еще раз.
Сообщение об ошибке для создания файла:
К сожалению, файл не удалось создать, возможно, файл с таким названием заблокирован. Попробуйте ввести другое имя.
Существует два типа трансляторов: компиляторы и интерпретаторы. Компиляция включает в себя основные части: анализа и синтеза. Часть «анализ» компилятора разделяет исходную программу на составные части ее элементы (конструкции языка) и занимается промежуточным представлением исходного кода программы. Часть «синтеза» занимается тем, что из промежуточного представления (созданного при помощи части «анализ») создает новую программу на языке Си.
Исходное текстовое представление программы не очень пригодно для работы компилятора, поэтому во время анализа программа прежде всего разбивается на последовательность строк, или, как принято говорить, лексем. Множество лексем разбивается на непересекающиеся подмножества (лексические классы). Лексемы попадают в один лексический класс, если они неразличимы с точки зрения синтаксического анализатора. Например, во время синтаксического анализа все идентификаторы можно считать. Каждому подмножеству сопоставляется некоторое число, называемое идентификатором лексического класса (token) или лексическим классом.
5. Описание констант, переменных и функций программы
KWs[KWn] это массив ключевых слов, которые обрабатываются данной программой, их 19: "begin", "end", "var", "real", "boolean", "false", "true", "array", "while", "do", "type", "and", "or", *"case", * "assign", "read","write", "rewrite", "reset";
int inlen,outlen,inpos; - текущие позиции (строки входные, выходные, позиция в строке входной);
int koper1,koper2,ker - эти переменные считают количество операторов во входном, выходном файле и кол-во ошибок;
int wnumf; - 0 - целое число, 1 - дробное;
int dt; -размер отступа (от начала строки);
Функция memcmp() сравнивает первые count символов массивов, адресуемых параметрами buf1 и buf2.
void *memcpy(void *to, const void *from, size_t count);
Функция memcpy() копирует count символов из массива, адресуемого параметром from, в массив, адресуемый параметром to. Если заданные массивы перекрываются, поведение функции memcopy() не определено.
если gl - идентификатор глобальности = 1, то это глобальная переменнаяиначе локальная есть четыре типа переменных (описаны выше) конструкцию while можно расшифровать так: пока указатель на структуру p существует выполнять: если тип переменной -1 то присвоить ей заданный тип и далее шаг вперед.
Функция memicmp лексикографически сравнивает первые cnt байтов из buf1 и buf2 вне зависимости от типа регистра, т.е. буквы верхнего и нижнего регистров считаются эквивалентными. Функция memicmp возвращает значение, указывающее соотношение buf1 и buf2,
char *strncpy (char *dst, const char *src, size_t len);
dst -- указатель на буфер назначения.
src -- указатель на исходную строку.
len -- максимальное количество копируемых символов (см. раздел Безопасность ниже).
Функция копирует из строки src в буфер dst не более чем len символов (включая нулевой символ), не гарантируя завершения строки нулевым символом (если длина строки src больше или равна len). Если длина строки src меньше len, то буфер добивается до len нулями. Функция возвращает значение dst.
int GetWordS() - получение слов, и если тип слова пробелы, запускает процедуру, пропускающую пробелы;
void inc_dt() - увеличение отступа;
void dec_dt() - уменьшение отступа;
int GetText(char * s1) - открытие файла;
int PutText(char * s2) - вывод обработанного текста;
void ErrOp() - вывод ошибочного оператора;
int flabel(int gl) - проверка на комментарий;
void CommEnd() - проверка на закрытие комментария;
int fkW() - здесь идет проверка на ключевое слово, сравниваются полученное нами слово со словом из списка и если да, то возвращается номер слова в списке проверка на ключевое слово.
int fIntRealBoolAr(int svar, int gl) - обработка переменных после слова var, здесь идут обращения к тем четырем функциям работающим со списком переменных обработка описания переменных: x1,..,xn: тип;
int fvar(int gl) - обработка описания блока переменных;
int fvardescr() - обработка блока описания переменных;
int fwrite(int ln) - обработка оператора write;
int fae() - обработка арифметического выражения;
int fle() - обработка логического выражения;
int asign() - проверка на присваивание;
int frepeat() - обработка оператора repeat;
int fwhile() - обработка оператора while;
int fbegin(int gl) - обработка блока операторов;
int Translate() - главная функция преобразования текста
dst -- указатель на буфер назначения.
// src -- указатель на исходную строку.
// len -- максимальное количество копируемых символов
"boolean", "false", "true", /* "array", */
"or", /*"case", */ "assign", /* "read",*/
#define w_char 4 //символ (разделитель, ...)
int wnumf; //0 - целое число, 1 - дробное
// int memcmp(const void *buf1, const void *buf2, size_t count);
!memcmp(p->s,&instr[inpos],wlen)) return 0;
// void *memcpy(void *to, const void *from, size_t count);
!memcmp(head->s,&instr[inpos],wlen)) return 0;
memcpy(ntype->s,&instr[inpos],wlen);
!memcmp(p->s,&instr[inpos],wlen)) return p->tp;
!memcmp(p->s,&instr[inpos],wlen)) return p->s;
if (c==' ' || c=='\t' || c=='\n') st = 1;
if ((c>='A' && c<='Z')||(c>='a' && c<='z')) st = 2;
c=='.' || c<=',' || c >=':' || c<=';' ||
c=='+' || c<='-' || c>='*' || c<='/' ||
{ wlen = 1; return wtype = w_char; }
else { wlen = 0; return wtype = w_error; }
if (c==' ' || c=='\t' || c=='\n') wlen++;
if (c=='.'&& instr[inpos+wlen+1]!='.') { //
if (c>='0' && c<='9') wlen++; else {
int scmp(char * m, char * s, int n){
memcpy(&outstr[outlen],&instr[inpos],wlen);
return (!scmp(&instr[inpos],s,wlen));}
// char *strncpy (char *dst, const char *src, size_t len);
for (int i=0; i= inlen) {
instr[inpos]=='(' ||instr[inpos+1]=='*');}
while (instr[inpos]!='}' && inpos0&&vartype() ) return 0;
if (instr[inpos]==':'){ //тип переменных
if (!scmp(&instr[inpos],"boolean",wlen)){
/*if (!scmp(&instr[inpos],"real",wlen)){
if (!scmp(&instr[inpos],"integer",wlen)){
if (!scmp(&instr[inpos],usertype(),wlen)){
/* if (!scmp(&instr[inpos],"array",wlen)){
if (instr[inpos]!='.'||instr[inpos+1]!='.')
if (scmp(&instr[inpos],"of",wlen)) return 0;
if (scmp(&instr[inpos],"real",wlen)) return 0;
if (!fIntRealBoolAr(0,gl)) ErrOp();
if (!fIntRealBoolAr(svar,0)) return 0;
if (wtype!=w_str || k&&k!=kw_var) return 0;
if (wtype!=w_str||vartype()) return 0;
if (!scmp(&instr[inpos],"var",wlen)){
if (!scmp(&instr[inpos],"begin",wlen)){
if (wtype!=w_str || fkW()) return 0;
if ((wtype!=w_str)&&(wtype!=w_numb)&&(wtype!=w_char)) return 0;
if (instr[inpos]=='\'') {wskip(); put_str("\'");}
if (instr[inpos]=='\'') {wskip(); put_str("\'");}
beg = 0; // по умолчанию ожидаем case 1: blabla;
if (wequ("begin")) {wskip(); beg = 1;};
fbegin(3); // 3 - означает обработку case
} else { put_dt(); put_str("break;\n");}}
if (ln) put_str("; printf(\"\\n\");\n");
/*else if (t==t_Real) put_str("%f");*/
if (wtype==w_str&&vartype()==t_Int) wcopy(); /*else
if (wtype==w_str&&vartype()==t_Real) wcopy(); else
if (wtype==w_str&&vartype()==t_Array) {
if (c=='+'||c=='-'||c=='*'||c=='/') wcopy();
if (wtype==w_str&&vartype()==t_Bool) wcopy(); else
if (!(type==t_Bool||/*type==t_Real||*/type==t_Int)) return 0;
if (instr[inpos]!=':'||instr[inpos+1]!='=')
if (wtype!=w_str||fkW()!=kw_do) return 0;
if (gl==1) put_str("\n\nvoid main()\n");
if (!asign()) return 0; //присваивание
put_str("#include \n\n"); //для scanf и printf
k = fkW(); //проверка на ключевое слово
if (k==kw_var){ //начало блока переменных
if (IsComment()) CommEnd(); //комментарии
if (instr[inpos]!='.') return 0; //точка в конце программы
printf("Введите имя входного файла: ");
printf("\nОшибка открытия файла!"); }
printf("\nВведите имя выходного файла:");
printf("\nОшибка создания файла!"); }
" в полученном файле: %d", koper2);
printf("\nКоличество ошибочных операторов"
" которые не были обработаны: %d", ker);
printf("\n\nРезультат хранится в файле: %s",s);
Для начала проверим программу на правильную обработку ошибочного ввода входного файла, для этого введем имя несуществующего файла:
программа алгоритм объектный ориентированный константа
Рисунок 7.1 - Вид экрана при вводе имени несуществующего файла
Рисунок 7.2 - Вид экрана при обработке файла firstfile
Рисунок 7.3 - Экран программы при обработке программы secondfile
Комментарий к полученным результатам:
Для исходного текста, в котором были записаны только определенные по заданию операторы, трансляция прошла успешно. При добавлении ошибочного оператора, трансляция выполнялась только до момента нахождения этой ошибки.
Мы приобрели навыки написания однопроходных трансляторов, в данном задании нам требовалось создать довольно простой транслятор, однако на этом примере были видны все фазы обработки файла исходного текста программы. Мы так же изучили основные виды синтаксических анализаторов и способы их применения, а так же узнали принципы работы таких программ. Обладая знаниями языка ассемблер уже можно попробовать написать свой компилятор. Однако некоторые тонкости построения компиляторов были упущены, что бы упростить программу. Сегодня любой компилятор это сложная программа, заточенная обычно под определенный язык, осуществляющая не только анализ и транслирование текста в машинные коды, но так же и оптимизацию.
Дискретная математика, конспект лекций. В.Г. Засовенко. Запорожье, 1998 г.
Начальный курс С и С++. Б.И. Березин. Москва: "ДИАЛОГ-МИФИ", 1999 г.
Язык программирования С++. Б. Страуструп. Киев:"ДиаСофт", 1993г.
А. Ахо, Р.С. (2001). Компиляторы: принципы, технологии и инструменты. Москва: Вильямс.
Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов. курсовая работа [461,0 K], добавлен 03.07.2011
Создание транслятора, обрабатывающего код программы на языке Паскаль и за счет эквивалентных операторов генерирующего программу на Си. Особенности внешней спецификации и работы лексического анализатора. Структура программы, вывод результатов на экран. курсовая работа [254,0 K], добавлен 02.07.2011
Выбор метода проектирования транслятора с языка Паскаль на язык Си, разработка и кодирование алгоритма программы. Использование допустимых операторов в исходном тексте, определение типов переменных и синтаксиса логических и арифметических выражений. курсовая работа [1,0 M], добавлен 03.07.2011
Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов. курсовая работа [305,9 K], добавлен 03.07.2011
Написание транслятора посредством языка Си, обрабатывающего конструкции integer, if Le then, записи (record), а также реализующего обработку new для выделения динамической памяти: разработка алгоритма реализации задачи, представление листинга программы. курсовая работа [171,7 K], добавлен 03.07.2011
Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия. курсовая работа [75,0 K], добавлен 21.03.2013
Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование. курсовая работа [567,5 K], добавлен 03.07.2011
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (операторы real, case, записи, указатель (на запись)) курсовая работа. Программирование, компьютеры и кибернетика.
Доклад по теме Болезнь Окельбо
Доклад: Как оформляют документы
Курсовая работа: Правила ведения трудовой книжки
Доклад по теме Таурин
Реферат: Структура и функции экономической теории
Курсовая работа по теме Эффективность смешанного варианта схемы электроснабжения
Дипломная работа по теме Организация химического эксперимента по органической химии в профильном классе
Дипломная работа по теме Язык Лисп
Дипломная Работа На Тему Списки Руської Правди
Готовые Сочинения Гвэ
Реферат по теме Принципы и стадии производства по делам об административных правонарушениях
Реферат по теме Трудовая демократия
Курсовая работа по теме Комплексная характеристика внутренних вод Африки
Отчет по практике по теме Организация деятельности ООО "Промэкс-Аудит"
Эссе По Высказыванию Мысли Мудрых
Музыка В Нашей Жизни Эссе
Сочинение Что Такое Материнская Любовь
Эссе Духи
Реферат По Математике На Тему Теория Пределов
Сочинение На Тему Патриотизм По Тексту Некрасова
Социально-психологический климат в группе - Менеджмент и трудовые отношения презентация
Система військових правоохоронних органів України, їх загальна характеристика, завдання та основні напрямки діяльності - Военное дело и гражданская оборона курсовая работа
Источники права - Государство и право контрольная работа


Report Page