Скачиваний:
7
Добавлен:
20.05.2014
Размер:
167.94 Кб
Скачать

5.1. Структура данных

text1 Одномерный массив символьных строк, содержащий исходный текст конвертируемой программы

text2 Одномерный массив символьных строк, содержащий выходной текст программы, полученной в результате конвертации

kstr число строк исходного текста

kstr2 число строк выходного текста

nstr номер текущей строки исходного текста

nstr2 номер текущей строки выходного текста

kerr число ошибочных операторов

kwarray массив из ключевых слов

npos текущая позиция в строке в исходном тексте

Fname1,Fname2имена файлов с путями

f1,f2 файловые переменные

TypeComment тип коментария

Ae строка для ae и le

Pf позиция для ae и le

Flag,def,v_open,mainflg,InclFlg,print,un всякие флаги

ostr выходная строка для le

qwe,l временная позиция для le и длина строки

fl флаг для le

perem массив переменных (для проверки дубликатов)

KolPer кол-во переменных

i счетчик для циклов

NUnStr номер строки, в которой начинается union

nfl:char номер переменной в union

MaxStr максимальное количество строк

azbuki мн-во из букв и «_»

oo мн-во из '<','>','=','!'

signs мн-во из ‘+’,’-‘,’/’,'*'];

zif мн-во из цифр

var_symb мн-во из символов, допустимых в именах переменных

5.2. Алгоритм главной программы

нач

если количество откр. фиг. ск. не соответствует кол-ву закрывающихся то

обработка ошибки с кодом 2 все

цикл пока не конец массива

пропуск пробелов

если не конец строки то

если коментарий то обработка коментария иначе

если ключевое слово то вызов процедуры обработки этого ключевого

слова иначе

если не присваивание то

если уже открыт union то

копирование в строку NUnStr всех символов до ';'

добавление в строку NUnStr ':record'

добавление в строку NUnStr+1 ' case integer of'

увеличение на 1 nstr2 и kstr2

вывод в текущую строку 'end;'

флаг открытия union = ложь

иначе обработка неизвестного ключевого слова

все все все все все

увеличение номера тек. строки

кц

если не обнаружен main то выдача сообщения

кон

5.3. Алгоритм подпрограммы обработки комментария(fcomment)

нач

если коментарий первого типа (//) то

вывод в вых поток '{'

вывод в вых поток всей строки, не включая ';'

вывод в вых поток '}'

иначе

вывод в вых поток '{'

вывод в вых поток всех символов, заключенных между '/*' и '*/'

вывод в вых поток '}'

все

если ошибка синтаксиса то вызов процедуры обработки ошибок с кодом 3

кон

5.4 Алгоритм выделения ключевого слова - kw

нач

если позиция какого либо из ключевых слов в строке равна текищей позиции и за этим словом идет пробел или ‘(‘ или ничего то возвращаем тип ключевого слова

иначе возвращаем никакой тип (kWNothing)

кон

5.5 Алгоритм обработки оператора присваивания – fprisv

нач

если позиция ‘=’ в текущей строке больше нуля то fprisv=правда иначе fprisv=ложь

выход

все

увеличиваем на 1 nstr2 и kstr2

проверяем все до ‘=’ на допустимость имнени переменной

проверяем все после ‘=’ на ae2

проверяем на ‘;’ в конце

если ошибка то обработка ошибки с кодом 13 иначе

выводим в вых поток все до ‘=’

выводим в вых поток ‘:=’

выводим в вых поток все после ‘=’

выводим в вых поток ‘;’

кон

5.6 Алгоритм обработки ошибки – ferror

нач

в соответствии с кодом ошибки выводим в коментариях соответствующее сообщение и ошибочную строку

увеличиваем на 1 кол-во ошибок

кон

5.7 Алгоритм обработки ключевого слова float

нач

увеличиваем на 1 nstr2 и kstr2

пропускаем 5 символов

если не v_open то

выводим в вых поток ‘var’

увеличиваем на 1 nstr2 и kstr2

все

проверяем все, что между ‘float’ и ‘;’ на допустимоть имен переменных

если ошибка то обработка ошибки с кодом 12 все выход

заносим переменную в массив перемненых

если не массив то выводим в вых поток имя переменной и ‘:real;’

иначе выводим в вых поток имя переменной

выводим в вых поток ‘:array[1..’

выводим в вых поток число, которое заключено в ‘[]’

выводим в вых поток ‘] of real;

v_open = правда

если ошибка то обработка ошибки с кодом 12 все выход

кон

Соседние файлы в папке 20_var_kurs