ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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 , В таблице меток для каждой метки указыва
ется номер цикла ее первого употребления |
( или описания, |
||
если оно расположено раньше |
), а |
при описании ( или, |
|
соответственно, первом употреблении |
) |
происхо - |