Разработка конвертора на языке Си для перевода программ на языке Паскаль в текст программы на языке Си
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
В°мм;
название программы;
сообщения об ошибках на месте неопознанных операторов;
определенные по условию операторы (for, type,function);
переменные типа integer;
арифметические конструкции;
логические конструкции;
объявление главной программы;
замену begin, end на {,};
присутствующие в исходном файле комментарии.
Пробелами в выходном файле пренебрегли.
К выходным данным так же будут относится, данные выдающиеся на экран, описанные функцией:
("\nКоличество операторов"
" в исходной программе: %d", koper1);("\nКоличество операторов"
" в полученной программе: %d", koper2);("\nКоличество ошибочных операторов"
" в полученной программе: %d", ker);("\n\nФайл с результатом: %s",s);
где:
koper1 -количество операторов в исходном файле
koper2 - количество операторов в выходном файле
ker - количество ошибок
s -имя выходного файла
Ошибки
При работе с данной программой пользователь может совершить ошибки: - неправильное имя исходного файла:
printf("Имя исходного файла:");("%s",s);(!GetText(s))
{ printf("\nОшибка открытия файла!"); }
неправильное имя входного файла:
printf("\nИмя выходного файла:");("%s",s);(!PutText(s))
{ printf("\nОшибка создания файла!");
}
В обоих случаях происходит выход из программы. Повторный ввод данных возможен только при новом запуске программы.
3. Метод решения задачи
Данный этап включает в себя описания логической и математической модели решения задачи, и словесное описание модели в виде плана действий.
Опишем логическую и математическую модель получения данных, использованные в курсовой работе. В данных моделях, описанных графически, принимается, что синтаксические диаграммы одинаковы для языков Паскаль и Си.
Пусть мы имеем некое выражение Le2, проверим его по нашей логической модели получения данных:
.Проверка является ли выражение Le2 слагаемым (OR), если да, то выход;
.Проверка является ли вы выражение Le2 множителем (AND) если да, то выход;
.Проверка является ли выражение Le2: константой, переменной или арифметическим выражением;
.Если Le2 арифметическое выражение - проверка на арифметическое выражение: проверяем на арифметические операции (=, =, <=, <). Выход;
.Если Le2 переменная, проверяем тип переменной. Если он не определен, то заключаем его в квадратные скобки и выход. Иначе - выход;
.Если Le2 константа проверяем ее значение, выход.
Пусть мы имеем некое выражение Ae1, проверим его по нашей математической модели получения данных:
.Если выражение операнд, то смотрим тип операции после него (+, *, /, -);
.Проверяем тип операнда: целый или переменная;
.Если это переменная, то проверяем, буква ли это, если это так то заключаем ее в квадратные скобки, выход.
4. Описание функций и переменных транслятора
Нарисуем структуру программы:
Где:
1.Newtype -установка типа переменной
.Vartype - получение типа переменной, при этом тип задан заранее
3.Ocvobw- освобождение списка переменных - просто удаление обоих списков, как для локальных переменных, так и для глобальных переменных
4.Analiz- Одна из главных функций получение слова, посимвольно анализируется текст.
Программа анализирует текст посимвольно и каждый раз определяет тип символа (число, буква, пробел ит.д.), когда удается ясно определить значение этого символа (цифра, переменная и т.д.) или последовательности символов( переменная, ключевое слово и т.д.) выполнение функции прерывается она возвращает тип этого слова Функция возвращает один из следующих кодов типа "слова":
- w_error - ошибка
w_space - пробелы
- w_str - строка
w_numb - число
w_char - символ
.put_str- запись строки в выходной буфер
.scmp - возвращает значения буферов
.put_char - запись символа в выходной буфер
.wcopy - копирование буферов
.wequ -возвращает значение scmp
10.AnalizS -получение слов, пропуск пробелов
.inc_dt- увеличение отступа
.dec_dt -уменьшение отступа
.put_dt - вывод отступа
14.OpenText -открытие файла
15.VvodText -вывод обработанного текста
16.Oshibka - вывод ошибочного оператора
.IsComment -проверка на комментарии
.CommEnd -проверка на закрытие комментарий
.fkW - проверка на ключевое слово, сравниваются полученное нами слово со словом из списка и если да, то возвращается номер слова в списке
.fIntRealBoolAr - обработка переменных после слова var, обращения к тем четырем функциям работающим со списком переменных и обработка описания переменных: x1,..,xn: тип;
.fvar -обработка описания блока переменных
.fvardescr -обработка блока переменных
.fbegin - обработка блоков операторов
.ffunction -обработка функций
.frecord - обработка оператора record
26.ob_arif - обработка арифметического выражения
27.ob_arifmetich -обработка арифметического выражения
28.ob_logich -обработка логического выражения
.asign -проверка на присваивание
.ffor -обработка оператора for
31.Konvektor -главная функция преобразования текста
.Main - основная программа
5. Описание алгоритма
На псевдоязыке опишем алгоритмы главной программы и основных процедур транслятора: Konvektor, AnalizS.
Основная программа main:
Начало
Ввод адреса исходного файла
Проверка: если адрес не правильный, то ошибка
Вызываем процедуру Konvektor
Ввод адреса выходного файла
Проверка: если адрес не правильный, то ошибка
Вывод информации на экран Конец
Описание