Транслятор для перевода программ с языка Паскаль в текст программы на языке Си
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
гда транслятор встречает незнакомую конструкцию, в этом тексте программы он должен будет напечатать сообщение об ошибке.
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. Листи