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

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

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

гда транслятор встречает незнакомую конструкцию, в этом тексте программы он должен будет напечатать сообщение об ошибке.

4. Структура программы и описание функций и операторов

Назначение подпрограмм:

main_analiz - главная программа прохода по тексту

f_comments - подпрограмма обработки комментариев

while - подпрограмма обработки оператора while- подпрограмма обработки операторных скобок

reset - подпрограмма обработки конструкции reset- подпрограмма обработки операций присваивания

ael - подпрограмма обработки арифметических и логических выражений

cpy - подпрограмма копирования слова во внешний файл без изменений

fassign - подпрограмма обработки выражения assign преобразует его в fopen- подпрограмма анализа нетерминальных символов

var - подпрограмма обработки раздела переменных

errs - подпрограмма обработки ошибок- подпрограмма проверки символа или слова на идентификацию с ранее объявленной переменной. Обрабатывает так же и тип этой переменной.

Таблица 4.1 - Таблица номеров идентификации для ключевых слов

Ключевое словоИдентификационный номерbegin1end2var3boolean4false5true6while7do8and9or10assign11read12reset13

Таблица 4.2 - Таблица идентификаторов типов переменных

ТипИдентификационный номерЦелочисленный1Логический2Файлы3

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

Константы и переменные

buflen - ограничение на объем исходного текстового файла. Применяется как для массива данных входного файла, так и для конечного файла.

KWn - количество, показывающее размер словаря ключевых слов. В данной программе эта константа равна 13.

wlen - показывает количество символов в текущем слове.

insource - массив хранящий исходный текст программы.

outsource - массив хранящий число обработанных строк.

op_f_in - количество обработанных операторов в файле с результатом трансляции.

File1 - исходный текстовый файл.

File2- файл с результатом трансляции.

outspos - длина файла с результатом трансляции.

ker - содержит число необработанных и ошибочных операторов, а так же конструкций.

lvlst - ссылка на локальные переменные.

vlst - ссылка на глобальные переменные.

op_f_out - число успешно компилированных операторов, которые будут содержаться в выходном файле.

KWn - содержит число обработанных ключевых слов на языке.

KWs - массив, содержащий число слова. В зависимости от порядка записи в нем ключевых слов, составляется таблица идентификаторов.

inspos - идентификатор-указатель в файле с результатом трансляции.

globalID - переменная-идентификатор глобальной переменной.

wt_type - переменная, в которая определяет тип слова.

Функции и процедуры

void inc_dt() - увеличивает отступ.

void dec_dt() - уменьшает отступ.

void put_dt() - печатает в файле с результатом трансляции.

int frfile(char * s1) - добавляет в массив исходный текст из файла.

int tofl(char * s2) - перемещает текст из массива в файле с результатом трансляции.

void ErrOp() - обработка ошибочного оператора.

int flabel(int globalID) - обработка оператора flabel.

int IsComment() - обработка начала комментария.

void CommEnd() - обработка конца комментария.

int gettype() - функция пропускает пробелы или слова (в зависимости от того где был курсор)

int IsAssign() - функция обработки операции присваивания

int fIntRealBoolAr(int svar, int globalID) - обрабатывает тип переменных.

int fvar(int globalID) - функция обрабатывает блок переменных, на выбор запускает либо int fIntRealBoolAr(int svar, int globalID), либо int flabel(int globalID).

int analysewords() - пропускает пробелы и переходит к запуску analyseWord.

int analyseWord() - Основная функция получения слова, анализирует символы программы. Функция возвращает один из следующих кодов:

w_w_err - Идентификатор ошибочного оператора.

w_w_sp - Идентификатор символа пробела.

w_w_str - Идентификатор строки.

w_w_n - Идентификатор числа.

w_w_c - Любые символы разделителию.

void wcopy() - копирует слово из исходного файла в файле с результатом трансляции не изменяя его.

int if_it_equ(char * s) - проверяет эквивалентность слова во исходном файле со строкой входящей в функцию.

int get_vartype() - функция возвращает тип переменной (если тот был заранее задан).

int f_logic() - функция обработки логического выражения

int gettype() - функция пропускает пробелы или слова (в зависимости от того где был курсор)

int IsAssign() - функция обработки операции присваивания

int str_cmp(char * m, char * s, int n) - использует функцию memicmp с некоторыми предопределенными данными.

void putsrt(char * s) - добавляет строку в файле с результатом трансляции.

void put_char(char c) - добавляет символ в файле с результатом трансляции.

int f_arithmetic() - вспомогательная подфункция обработки арифметического выражения.

int ae() - функция обработки арифметического выражения.

int freset() - функция обработки freset.

int IsBegin(int k) - одна из основных функций обработки "тела" программы. Выбирает запуск подпрограмм.

int yaVarProc() - обработка блока описания переменных.

int f_record() - функция обработки конструкции record.

void put_dt() - печатает в файле с результатом трансляции.

int add_varInList(int isglobal) - Добавляет обработанное слово как переменную в список глобальных или локальных переменных.

void settype(int globalID, int type) - полностью перебирает список локальных и глобальных переменных.

void word_string(char * s) - использует функцию strncpy с заранее указанным выходящим файлом.

5. Листи