normDDr (1158429), страница 5
Текст из файла (страница 5)
<ordered group number> OR <MSCS number>
3.19Таблица распределенных переменных (Table of distributed variables)
Таблица распределенных переменных (Table of distributed variables) предназначена для хранения информации о переменных, для которых на каждом процессоре необходимо выделить требуемый объем памяти.
Строка Таблицы распределенных переменных (Table of distributed variables) имеет вид:
| name-variable | name-index | range | name-index | range |
<name-variable>::=<token code>
<name-index>::=<token code>
<range>::=<integer><integer>
Эта информация означает, что переменная <name-variable> распределяется по процессорам по индексам <name-index>, объем памяти в каждом процессоре по указанному индексу определяется полем <range>.
3.20Таблица теневых переменных (Table of shadow variables)
Таблица теневых переменных (Table of shadow variables) предназначена для хранения информации о переменных, для которых при выделении памяти на каждом процессоре необходимо выделить дополнительную память, предназначенную для хранения значений, пересылаемых от соседних процессоров (‘shadow edges’, см. документ ‘Fortran DVM. Language description’, описание директивы SHADOW).
Строка Таблицы теневых переменных (Table of shadow variables) имеет вид:
| name-variable | name-index | low-shadow | high-shadow | name-index | low-shadow | high-shadow |
<name-variable>::=<token code>
<name-index>::=<token code>
<low-shadow>::=<integer>
<high-shadow>::=<integer>
Эта информация означает, что для переменной <name-variable> необходимо выделить дополнительную память по индексам <name-index>, размер расширения по указанному индексу <low-shadow> слева и <high-shadow> справа.
3.21Таблица удаленных переменных (Table of remote variables)
Таблица удаленных переменных (Table of remote variables) содержит информацию о предложениях программы, в которых используются удаленные распределенные массивы (см. документ‘Fortran DVM. Language description’, описание директивы REMOTE_ACCESS).
Строка Таблицы удаленных переменных (Table of remote variables) имеет вид:
| statement number | name-variable | index-expression | name-index | range | name-index | range |
<name-variable>::=<token code>
<index-expression>::=<sequence of token codes>
<name-index>::=<token code>
<range>::=<integer><integer>
Эта информация означает, что в операторе с номером <statement number> требуются значения переменной <name-variable>[<index-expression>], диапазоны изменения распределенных индексов <name-index> определяются полем <range>.
3.22Промежуточное представление Fortran-DVM программы (Intermediate representation of Fortran DVM programs)
Для Промежуточного представления Fortran-DVM программы (Intermediate representation of Fortran DVM program) используется список FORT (List FORT) следующего вида:
|
| fortran-statement | … | fortran-statement |
Структура элемента <fortran-statement>:
| ‘C’ | comment | - | line-comment |
| ‘CHPF’ | HPF-comment | - | HPF-line-comment |
| ‘CDVM’ | DVM-comment | - | DVM-line-comment |
| label | CONTINUE | - | operator CONTINUE |
| DO label name-index b-value e-value step | - | operator DO label name-index=b-value,e-value,step | |
| IF logic-expression label | - | operator IF (logic-expression) GOTO label | |
| GOTO label | - | operator GOTO label | |
| CALL name-subroutine list-parameters | - | operator CALL name (list-parameters) | |
| READ chan-number label read-list | - | operator READ (chan-number,label)read-list | |
| WRITE chan-number label write-list | - | operator WRITE (chan-number,label)write-list | |
| label | FORMAT format-list | - | operator label FORMAT( format-list) |
| IFTHEN logic-expression operators | - | operator IF logic-expression THEN operators ENDIF | |
| IF_THEN_ELSE logic-expression (operators)(operators) | - | operator IF logic-expression THEN operators ELSE operators ENDIF | |
| PROGRAM name-program | operator PROGRAM | ||
| SUBROUTINE name-subroutine list-parameters | - | operator SUBROUTINE name (list-parameters) | |
| type | FUNCTION name-function list-parameter | - | operator type FUNCTION name (list-parameters) |
| declaration declaration-list | declaration of variables | ||
| EXTERNAL external-list | declaration of externals | ||
| DATA data-list | - | operator DATA | |
| assignment | operator assignment | ||
| RETURN | operator RETURN | ||
| END | operator END | ||
| STOP | operator STOP |
<comment>::=<string>
<HPF-comment>::=<sequence of token codes>
<DVM-comment>::=<sequence of token codes>
<label::=<integer>
<name-index>::=<token code>
<b-value>::=<integer>
<e-value>::=<integer>
<step>::=<integer>
<logic-expression>::=<sequence of token codes>
<list-parameters>::=<sequence of token codes>
<name-subroutine>::=<token code>
<name-program>::=<token code>
<name-function>::=<token code>
<chan-number>::=<integer>
<read-list>::=<sequence of token codes>
<write-list>::=<sequence of token codes>
<format-list>::=<sequence of token codes>
<declaration-list>::=<sequence of token codes>
<external-list>::=<sequence of token codes>
<data-list>::=<sequence of token codes>
<operators>::=<fortran-statement> OR <operators><fortran-statement>
<type>::=’I’ OR ‘R’ OR ‘D’
<assignment>::=<sequence of token codes>
<CONTINUE>::=<token code>
<DO>::=<token code>
<IF>::=<token code>
<CALL>::=<token code>
<READ>::=<token code>
<WRITE>::=<token code>
<FORMAT>::=<token code>
<IFTHEN>::=<token code>
<IF_THEN_ELSE>::=<token code>
<declaration>::= <REAL> OR <INTEGER> OR <DOUBLE PRECISION>
<REAL>::=<token code>
<INTEGER>::=<token code>
<DOUBLE PRECISION>::=<token code>
<EXTERNAL>::=<token code>
<PROGRAM>::=<token code>
<SUBROUTINE>::=<token code>
<FUNCTION>::=<token code>
<DATA>::=<token code>
<RETURN>::=<token code>
<END>::=<token code>
<STOP>::=<token code>
3.23Очередь входных переменных (Input variables queue)
Очередь входных переменных (Input variables queue) предназначена для хранения информации о порядке ввода, определенного компилятором, для input-variable.
Элемент Очереди входных переменных (Input variables queue) имеет вид:
|
| name-variable | format | name-index | range | … | name-index | range |
<file number>::=<integer>
<name-variable>::=<identifier>
<format>::=<Norma language attribute format>
<name-index>::=<identifier>
<range>::=<integer><integer>
Эта информация означает, что переменная с именем <name-variable> должна вводиться из файла с номером <file-number> по формату <format> для значений индексов <name-index>=<range>, … , <name-index>=<range> (для scalar variable поля <name-index><range> отсутствуют).
4.Глобальная инициализация (Global initialization).
Входная функция транслятора - функция norma, которая осуществляет инициализацию глобальных счетчиков транслятора и анализ опций трансляции, заданных в командной строке.
Общая структура управления блока Global initialization приведена на следующей схеме.
n
orma count0 zaparg face count
erroutall
4.1Инициализация глобальных счетчиков (функция count0)
glob=0 - счетчик ошибок в Норма-программе,
globw=0 - счетчик предупреждений в Норма-программе,
eof=0 - признак завершения чтения исходного файла с Норма-программой,
bline=0 - начальное значение счетчика для заполнения поля <begin line number> Таблицы соответствия предложения-строки (Statements-lines table)
eline=0 - начальное значение счетчика для заполнения поля <end line number> Таблицы соответствия предложения-строки (Statements-lines table)
beginline=0 - начальное значение счетчика строк исходного файла, обработанных при создании листинга трансляции.
4.2Анализ опций трансляции (функция zaparg)
Командная строка имеет вид norma <опции> <исходный файл>.
Исходный файл должен иметь расширение .hop и задаваться в виде <name>.hop.
Функция zaparg:
fortran-statement
file number 














