Файл: Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.07.2024

Просмотров: 107

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

- 90 -

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

адреса (смещения), во второй - номера баз, соответствующих

втим смещениям.

При втором просмотре в МОЗУ-0 и МОЗУ-I постоянно находится та часть компилятора, которая производит обра­

ботку наиболее часто встречающихся операторов и полную обработку арифметических выражений (включая обработку об­

ращений к подпрограммам - эта часть находится в МОЗУ-1). Обработка встречающихся реже операторов осуществляется

так называемыми вставными блоками (ВБ). Вставные блоки

постоянно расположены на магнитном барабане, и по мере надобности ас одному вызываются в МОЗУ-0 (с ячейки 7000).

При обнаружении ошибок во время второго просмотра

на АЦПУ печатается информация о них: номер ошибки, тексто­

вая информация и номер оператора ФОРГРАН-програмлы, в ко­ тором обнаружена ошибка (см.4^. Вслед за обнаружением ка­

кой-либо ошибки компиляция, как правило, продолжается со следующего за ошибочным оператора. При наличии хотя бы одной ошибки рабочая программа не создается, и результа­ том компиляции является лишь информация обо всех ошибках, обнаруженных при компиляции ФОРТРАН-программы.

Распознавание операторов осуществляется с по­ мощью "таблицы решений" (см..например, [ 8 ] , п.1.3.2.). Каждому оператору в ней соответствует одна строка, в кото­ рой содержится информация об адресе блока, обрабатывающего

этот оператор, а также о тиле последнего (является ли он

выполняемым, а если нет - начинается ли он с дозволенного символа и может ли он быть записан в любом иесте програм­ мы). Одновременно с распознаванием операторов проверяется

и правильность их последовательной записи.

Создаваемая вторым просмотром промежуточная рабо­ чая программа постранично записывается на магнитный ба­ рабан. Если второй просмотр не обнаружил ошибок, то после

- 91 -

обработки оператора END ФОРГРАН-программы происходит

запись остатка промежуточной программы на магнитный ба­

рабан и вызов в МОЗУ-1 той части компилятора, которая

осуществляет третий просмотр,

5.2.1, Структура, распределение и типы

памяти рабочей программы

5 . 2 . I . I . Рабочая программа оостоит из:

5 . 2 . I . I . I . Обычных команд, непосредственно реализующих операторы ФОРТРАН-программы.

5.2Л,1.2. "Вкрапленных"-команд, расположенных вслед за

массивом обычных команд, и служащих для реализации об­ работки некоторых элементов массивов о переменными, ин­ дексами, некоторых возможностей оператора D0 , инфор­

мационных строк оператора ]?0шлАТ и т.п. Эти

команды являются либо псевдокомандами, которые служат

для формирования обычных команд, либо•информациошшми строками стандартной программы печати на АЦТГ/, либо (короткими) блоками, реализующими преобразования пара­

метра внешнего цикла для его использования во внутрен­

нем (см.также 5.2.4.). "Вкрапленные" команды при третьем

просмотре обрабатываются тшс ке, как и обычные команды,

5.2.1Л.3. Констант, расположенных вслед за массивом "вкрапленных" команд, и используемых для формирования или изменения команд. В отличие от "вкрапленяыхи цоманд, константы не обрабатываются при третьем просмотре.

5.2.1 Л.4. Чисел, расположенных вслед за массивом кон­ стант.

5.2.I.I.5. "Добавочных" команд, расположенных вслед за

массивом чисел и создаваемых, если это нужно, при треть­

ем просмотре для реализации операторов

О0Т0 и ариф­

метических

IF , в которых встречаются выходы ид об­

ласти цикла. Необходимость в этих командах выясняется лишь при третьем просмотре.


5.2.1.2, Перед началом третьего просмотра дана массива "добавочных" команд еще неизвестна, и в то же время тре­ буется .указание базовых адресов для переменных, различвых рабочих ячеек (см*также 5,2,1.3,4,) к массивов МОЗУ- -0. Поэтому нсо указанные делздшш размещаются в конце МСЗУ-0, нт-посрвдо-тьенно перед программой НС-2М. В СВЯЗИ с эти*! рабочее пел? ИС-СМ переэйэдаетон вверх, в сторону уменьшения адресов.. Его качало располагается вслед за маосююк "добавочных" команд, э конец - перед массивом указекинх выше г.едтчш;. Наивное р~;1очего коля ссущеотаяяе*с.ч прогрг-лчиой старта (см. 5.).

R.2.1.3, Второй иросхотр резервирует место в памяти для ЯВНО ИЛИ НЙЯ5ИО ЙГ.ПОЛЬЗУЗМЬ."' а ФОГТ?АН -ЯрОгрЫА'делачи...

'5.2.1,3,1. Кавдд-i *;рость.' аерьмеьпой соответствует одна ячейка, 'з которой располагается ее значение. Адреса этих ячеек располагаются, КАК правило, подряд, а порядке яв­ ного или неяркого описании переменных. Однако, в некото­ рых случаях компилятор саг,: создает вспомогательные (внутренние) простые переменные и присваивает им адреса вперемешку с адреса*: проезд/ переменных, явно шлюдьзу-- емих в «ЮРТРАП-програгале. Поэтому расположение подряд гарантируется лишь для адресов явно от;сашшх простых пе­ ременных*

Идентификатор обычной простой переме'шой занимает не более 42 (правых) разрядов ячейки (из 45). Програм­ мист не может случайно использовать (и испортить) созда­ ваемые компилятором вспомогательные простые, перемеш-ше, т.к. их идентификаторы используют по крайней мере один из трех левых разрядов ячейки.

Ра&течным простым переменным соответствуют раз­ личные ячейки, иначе при обращениях к подпрограммам значения этих переменных могли бы испортиться.

Однако, обработка каждой отдельно взятой програм-

-93 -

мной единицы осуществляется независимо от других, и, в частности, таблица локальных простых переменных организует­ ся как стек (см., напр., С 83 > п « п ° 2 . 2 , 1 . и 2 , 2 . 2 . , и

£ 93) . Это осуществляется аналогично составлению таблиц для компиляции ассемблером отдельных (независимых)блоков [ 9 ] , с той лишь разницей, что локальным простым перемен­ ным различных программных единиц присваиваются различные адреса в памяти.

Таким образом, в различных программных единицах можно использовать одинаковые идентификаторы для обозна­ чения различных (локальных) простых переменных.

Таблица глобальных простых переменных,в отличие от таблиц локальных проотых переменных, при компиляции посто­ янно находится в памяти.

Перед занесением простой переданной в таблицу в связи с ее неявным описанием происходит проверка, не была ли она описана ранее. Бели ^е идентификатор совпадает с идентификатором глобальной простой переменной, то она отождествляется с последней. Если (это относится и к явному описанию) ее идентификатор встретился в других таблицах (например, в таблице массивов или подпрограмм), то такое его употребление считается ошибочным. Если же этот иден­ тификатор не встречается ни в каких таблицах, то происхо- . дат его занесение в таблицу простых переменных и присваи­ вание ему соответствующего адреса.

Если простая переменная опиоана как имеющая абсо­ лютный адрес, то ей присваивается этот адрес, причем ком­ пилятор не проверяет допустимость такого присваивания,.

В частности, если этот адрес является одним ив адресов-ра­ бочей программы, то последняя в процессе выполнения может испортиться.

5.2.1.3.2. Каждому массиву соответствует набор из несксль- K.JC расположенных подряд ячеек. Длина набора равна коли­ честву элементов этого массива. В указанных ячейках распо-


-94 -

латаются значения элементов массива. Их адреса распола­

гаются в соответствующих видах памяти (МОЗУ-0, МОЗУ-1

или динамическая память) подряд, в порядке описания массивов в ФОРТРАН-программе.

Обработка описаний массивов осуществляется так же,

как и обработка описаний простых переменных (см.

5.2.X • 3. X.) •

5.2.1.3.3.При компиляции некоторых конструкций ФОРТРАН-

программы в состав рабочей программы включаются констан­ ты и ч*.сла, Примерами таких конструкций являются обраще­ ния к динамическим массивам, числа в арифметических выра­

жениях и т.п.

Таблицы констант и чисел создаются компилятором

для всей ФОРТРАН-программы в целом и при третьем просмот­ ре без всяких измененийпересылаются в соответствующие

места рабочей программы.

В таблицу констант или в таблицу чисел заносятся (по мере надобности) лишь те величины, которых в соот­ ветствующей таблице еще нет. Числа 1,2,3 и 10 не зано­ сятся в таблицу чисел. Вместо этого компилятор програм­ мирует обращения к соответствующим ячейкам ИС-2М [ 4 ] .

При компиляции команд автокода имеющиеся в ИС-2М константы L 4"] не заносятся в таблицу констант; вместо этого также программируется обращение к соответствующим

ячейкам ИС-2М.

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

Для этой цели в компиляторе отводится одна ячейка R , каждый из 45 разрядов которой соответствует одной рабочей

ячейке. Если в каком-либо разряде ячейки н находится единица, то это означает, что соответствующая рабочая

ячейка в данный момент занята; если в этом разряде нахо­ дится нуль, то соответствующая рабочая ячейка в данный

момент свободна. •

-95 -

При выборе рабочей ячейки происходит поиск первого, считая слева, нулевого разряда в ячейке К • Зтот разряд

становится единичным, и его номер считается (относитель­

ным) адресом рабочей ячейки. Как только сформируется коман­ да, в первом или втором адресе которой встречается обраще­

ние к содержимому некоторой рабочей ячейки Г0 , последняя считается свободной, и в соответствующий разряд ячейки R

засылается нуль. Идея этого процесса принадлежит Б.Б.Леш. 5.2.1.3.5. ' Некоторые команды рабочей программы формируют­ ся его самой из псевдокоманд и величин, создаваемых в про­

цессе ее работы.. Такие псевдокоманды в рабочей программе не выполняются и, следовательно,, должны быть расположены

вне массива обычных команд (ом. 5 . 2 . I . I . I . ) . При втором . просмотре эти псевдокоманды создаются внутри массива

обычных команд, но помечаются специальным признаком, ука­

зывающим, что данная команда является "вкрапленной". В дальнейшем, при третьем просмотре, все "вкрапленные"

команды обрабатываются, как и обычные команды, а затем собираются в один массив, размещаемый вслед за последними.

К числу "вкрапленных" команд относятся также инфор­

мационные строки стандартной программы Печати на АЦПУ,

указывающие формат втой печати; блоки, реализующие преоб­

разование параметра внешнего цикла при его использовании во внутреннем и др. Идея такого рода команд принадлежит Б.Б.Леви.

5.2.1.3.6. При выходе (с помощью оператора G0 Т 0 или арифметического I F ) из области цикла требуется сохра­ нить значение параметра этого цикла. Поскольку' параметр цикла внутри его области хранится в регистре адреса, при описанном переходе необходимо выполнение добавочной коман­ ды.

Если метка, встречающаяся в таком операторе Q0 Т0 v ш I F , описана (т.е. помечает какой-либо оператор) до

этого оператора, то указанная команда формируется при вто­ ром просмотре. В противном случае второй просмотр сделать

этого не может, т.к. остается неизвестным, вне или внутри


- Ъо -

области цикла будет расположена данная метка. Выясняется

это лиль при третьем просмотре. Тогда и формируются, если

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

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

5.2.2. Обработка меток.

При обработке каждого оператора ире:,;де всего происходит обработка его метки, если она ссаь.

Если оператор, расположенный вслед за Gj0 Т0,ариф-

метическим X р ^ •STffiP пли RETURМ , не помечен, vo он

может быть только командой автокода (константой).

В противном случае компилятор выдаст сообщите об ошибке.

Невыполняема оператор, за исключением оператора

Fj^RM AT. не должен снабжаться меткой.

Метки в программных единицах являются локальными.

Ото означает, что разные операторы могут быть помечены одинаково в том и только Б том случае, когда они находят­ ся в различных программных единицах.

Когдгалятор проверяет правильность употребления ме­

ток, помечающих операторы ипутри областей циклон. Все циклы

в программной единице нумеруются подряд,начинал с первого.

Если в операторе(3)0 Т<£ или арифметическом IJF

.расположенном

в цикле с номером

.встретилась метка пг

, то она--может

помечать оператор.расположенный либо вне области какого-

либо цикла, либо внутри области объемлющего цикла ( с

номером WJ^W.J

) . После завершения какого-либо цикла все

описанные в нем метки становятся недоступными для обраще­ ния, т. е. считается, что они расположены в цикле с максималь­ но возможным номером Ы^. Исключение составляют метки опера­ торов F0RMA.T , В таблице меток для каждой метки указыва­

ется номер цикла ее первого употребления

( или описания,

если оно расположено раньше

), а

при описании ( или,

соответственно, первом употреблении

)

происхо -