Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по курсовой по программированию.DOC
Скачиваний:
42
Добавлен:
20.05.2014
Размер:
586.75 Кб
Скачать

8.3. Выделение подпрограмм

На основе анализа алгоритма главной программы выделяются основные подпрограммы и для каждой указывается её имя, например:

1. Обработка комментария – fcomment.

2. Обработка оператора с ключевым словом – fstatkey.

3. Обработка оператора присваивания – fassign.

4. Обработка ошибки – ferror.

Далее разрабатываются алгоритмы выделенных подпрограмм. Для каждой подпрограммы описываются исходные данные, результат и связь. На основе анализа алгоритмов могут выделяться новые подпрограммы.

Ниже предполагается, что каждая подпрограмма обработки оператора или его элемента оформлена в виде подпрограммы-функции и возвращает код ошибки ( 0 - при отсутствии ошибки). Исходными данными для каждой такой подпрограммы являются:

text1

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

nstr1

номер строки массива text1, содержащей конвертируемый элемент;

Npos1

номер первого символа конвертируемого элемента в текущей строке массива text1 ( для операторов - номер первого символа после ключевого слова );

nstr2

номер строки в массиве text2, в которую записывается результат конвертирования.

Результатами работы подпрограммы являются:

text2

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

nstr2

номер текущей строки массива text2;

nstr1

номер текущей строки массива text1, содержащей символ, следующий за обработанным элементом;

Npos1

номер символа в текущей строке массива text1,следующего за обработанным элементом;

<имя подпро­граммы>

номер ошибки ( 0 - нет ошибки ). В случае ошибки осуществляется выход из подпрограммы и текущей строкой массива text1 становится строка, следующая за строкой с ошибкой.

Приведённые ниже алгоритмы предполагают разработку мини-транслятора Паскаль-Си.

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

Дано:

text1

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

text1

исходный текст;

nstr1

номер строки массива text1, содержащей комментарий;

nstr2

номер текущей строки в массиве text2.

Требуется получить:

text2

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

nstr1

номер строки массива text1, следующей за строками комментария (если комментарий был размещен на одной строке, то nstr1 = nstr1 + 1);

nstr2

номер текущей строки в массиве text2 (если комментарий размещён на одной строке, то nstr2 = nstr2 + 1).

Связь:

Текст комментария, размещенный в массиве text1 между символами '{' и ‘}’ или '(*' и ‘*)’, переписывается в текущую строку массива text2 с добавлением в начало и конец скобок комментария /* и */, например:

text1

text2

{ текст

комментария }

/*текст

комментария*/

(*еще один

текст комментария *)

/*еще один

текст комментария */

Алгоритмfcomment

Запись в текущую строку text2 символов /*

Определение символов конца комментария в исходном тексте: '}' или '*)' в зависимости от символов начала комментария '{' или '*('

Копирование текста комментария из text1 в текущую строку text2 пока не встретятся символы конца комментария или не будет достигнут конец массива text1. При каждом переходе на следующую строку text1 происходит увеличение на 1 счётчика nstr1.

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

Запись в text2 символов */

nstr2 := nstr2 + 1

fcomment := 0;

конец