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

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

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

ки, где найдена ошибка и саму ошибку. Далее выводится статистика о трансляции кода на экран.

Для запуска программы достаточно запустить откомпилированный файл Project.exe.

К аппаратным ограничения можно отнести процессор iастотой не менее 500 Гц, не менее 32М оперативной памяти.

В консоли после ввода пути и названия файла (разрешение может быть любым) пользователю будет выведено одно из двух возможных сообщений:

. Об успешности операции.

. Сообщение об ошибке.

В случае номер один запустится специальная подпрограмма обработки текста.

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

Сообщение об ошибке для открытия файла:

К сожалению, файл не удалось открыть. Проверьте правильность имени и попробуйте еще раз.

Сообщение об ошибке для создания файла:

К сожалению, файл не удалось создать, возможно, файл с таким названием заблокирован. Попробуйте ввести другое имя.

4. Описание алгоритма программы

Существует два типа трансляторов: компиляторы и интерпретаторы. Компиляция включает в себя основные части: анализа и синтеза. Часть анализ компилятора разделяет исходную программу на составные части ее элементы (конструкции языка) и занимается промежуточным представлением исходного кода программы. Часть синтеза занимается тем, что из промежуточного представления (созданного при помощи части анализ) создает новую программу на языке Си.

Исходное текстовое представление программы не очень пригодно для работы компилятора, поэтому во время анализа программа прежде всего разбивается на последовательность строк, или, как принято говорить, лексем. Множество лексем разбивается на непересекающиеся подмножества (лексические классы). Лексемы попадают в один лексический класс, если они неразличимы с точки зрения синтаксического анализатора. Например, во время синтаксического анализа все идентификаторы можно iитать. Каждому подмножеству сопоставляется некоторое число, называемое идентификатором лексического класса (token) или лексическим классом.

. Описание констант, переменных и функций программы

Константы

KWs[KWn] это массив ключевых слов, которые обрабатываются данной программой, их 19: "begin", "end", "var", "real", "boolean", "false", "true", "array", "while", "do", "type", "and", "or", *"case", * "assign", "read","write", "rewrite", "reset";inlen,outlen,inpos; - текущие позиции (строки входные, выходные, позиция в строке входной);

Переменные

int koper1,koper2,ker - эти переменные iитают количество операторов во входном, выходном файле и кол-во ошибок;wlen; - длина "слова";wtype; - тип "слова";wnumf; - 0 - целое число, 1 - дробное;dt; -размер отступа (от начала строки);

Функция memcmp() сравнивает первые count символов массивов, адресуемых параметрами buf1 и buf2.меньше buf2 = меньше нуля;равен buf2 = 0;

buf1 больше buf2 = больше нуля;

void *memcpy(void *to, const void *from, size_t count);

Функция memcpy() копирует count символов из массива, адресуемого параметром from, в массив, адресуемый параметром to. Если заданные массивы перекрываются, поведение функции memcopy() не определено.

если gl - идентификатор глобальности = 1, то это глобальная переменнаяиначе локальная есть четыре типа переменных (описаны выше) конструкцию while можно расшифровать так: пока указатель на структуру p существует выполнять: если тип переменной -1 то присвоить ей заданный тип и далее шаг вперед.- длина анализуруемого слова;

*int memicmp (buf1, buf2, cnt);*buf1; первый буфер*buf2; второй буферcnt; количество символов

Функция memicmp лексикографически сравнивает первые cnt байтов из buf1 и buf2 вне зависимости от типа регистра, т.е. буквы верхнего и нижнего регистров iитаются эквивалентными. Функция memicmp возвращает значение, указывающее соотношение buf1 и buf2,

а именно; Величина Значение

меньше 0 buf1 меньше, чем buf2

buf1 идентично buf2

больше 0 buf1 больше, чем buf2*strncpy (char *dst, const char *src, size_t len);

dst - указатель на буфер назначения.- указатель на исходную строку.- максимальное количество копируемых символов (см. раздел Безопасность ниже).

Функция копирует из строки src в буфер dst не более чем len символов (включая нулевой символ), не гарантируя завершения строки нулевым символом (если длина строки src больше или равна len). Если длина строки src меньше len, то буфер добивается до len нулями. Функция возвращает значение dst.Getwords() - получение слов, и если тип слова пробелы, запускает процедуру, пропускающую пробелы;inc_dt() - увеличение отступа;dec_dt() - уменьшение отступа;

void put_dt() - вывод отступа;GetText(char * s1) - открытие файла;

int PutText(char * s2) - вывод обработанного текста;ErrOp() - вывод ошибочного оператора;flabel(int gl) - проверка на комментарий;CommEnd() - проверка на закрытие комментария;fkW() - здесь идет проверка на ключевое слово, сравниваются полученное нами слово со словом из списка и если да, то возвращается номер слова в списке проверка на ключевое слово.

int fIntRealBoolAr(int svar, int gl) - обработка переменных после слова var, здесь идут обращения к тем четырем функциям работающим со списком переменных обработка описания переменных: x1,..,xn: тип;fvar(int gl) - обработка описания блока переменных;fvardescr() - обработка блока описания переменных;fwrite(int ln) - обработка оператора write;fae() - обработка арифметического выражения;fle() - обработка логического выражения;asign() - проверка на присваивание;frepeat() - обработка оператора repeat;fwhile() - обработка оператора while;fbegin(int gl) - обработка блока операторов;Translate() - главная функция преобразо