Разработка конвертора на языке Си для перевода программ на языке Паскаль в текст программы на языке Си

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



В°мм;

название программы;

сообщения об ошибках на месте неопознанных операторов;

определенные по условию операторы (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

Ввод адреса выходного файла

Проверка: если адрес не правильный, то ошибка

Вывод информации на экран Конец

Описание