М.М. ГОРБУНОВ-ПОСАДОВ - Системное обеспечение пакетов прикладных программ (1184225), страница 25
Текст из файла (страница 25)
Описание модуляКак уже упоминалось, в системе ПНФ каждый квазимодульснабжается заголовком, содержащим описания всех входных и выходныхпараметров. В результате формируется функциональный модуль пакета,состоящий, таким образом, из заголовка, задающего интерфейс, и тела,задающего квазимодуль. Описание модуля на языке системы ПНФ имеетвидMODULE <имя модуля>(MAIN=<имя главной программы>)/R <имя заголовка модуля>/R <имя тела модуля>MODENDВ заголовке модуля содержатся описания всех параметров модуля:HEADER <имя заголовка модуля><описание параметра модуля>. .
. . . . . . . . . . . . . . . .HEADENDСтруктура описаний параметров модуля рассматривалась в предыдущемразделе.В теле модуля задаются сведения о программах, входящих в составквазимодуля:BODY <имя тела модуля>[([TRANSL=<имя транслятора>,]PERSO=<место>)][/R <имя программной единицы>]. . . . . . . . .
. . . . . . . . .BODEND(Заметим, что во второй и третьей строках записана металингвистическаяформула, содержащая вложенные квадратные скобки «необязательности».)Часть программ (точнее, программных единиц, допускающихавтономную трансляцию) может быть задана в текстовом виде, и в этомслучае их список задается с помощью предложений /R. Часть программможет быть взята из библиотеки (PERSO) объектных модулей мониторнойсистемы Дубна.
Расположение библиотеки на внешнем носителе задаетсяпараметром <место>, который имеет вид NNZZZZ, где NN - математическийномер устройства, a ZZZZ - номер зоны.Для программ, задаваемых в текстовом виде, следует указать <имятранслятора>, который должен быть к ним применен: FORTRAN, FOREXили ALGOL. Отметим, что <имя транслятора> может задаваться и приописании отдельных программных единиц. Поэтому в теле модуля указаниео трансляторе записывается лишь в случае, если все программные единицыили большинство из них написаны на одном и том же языкепрограммирования.Если в теле модуля нет ссылок на программные единицы, то указаниебиблиотеки объектных модулей должно бытьвключено обязательно, в результате чего все программы будут извлекатьсяиз этой библиотеки.Отдельные программные единицы на языке системы ПНФ записываютсяследующим образомUNIT <имя программной единицы>[(TRANSL=<имя транслятора>)<текст программной единицы>UNIENDВ качестве примера приведем описания модуля ROZ6, участвующего вреальных производственных расчетах./С ОПИСАНИЕ МОДУЛЯ ROZ6MODULE ROZ6(MAIN=ROZ6M)/R ROZHDR/R ROZBODMODEND/С ЗАГОЛОВОК МОДУЛЯ ROZ6HEADER ROZHDRDATA(ВИД=ВХОД, ФОРМАТ=ДАННЫЕ,РАЗМЕЩЕНИЕ=ВВФАЙЛ)CONROZ(ВИД=ВХОД,ФОРМАТ=КОНСТАНТЫ,РАЗМЕЩЕНИЕ=КАНАЛ(НОМЕР=4))SOURCI(ВИД=ВХОД,ФОРМАТ=ИСТОЧНИК-Q1,РАЗМЕЩЕНИЕ=КАНАЛ(НОМЕР=6), РАЗМЕЩЕНИЕ-Н.К.=ПК(НОМЕР=1,СМЕЩЕНИЕ=15,ДЛИНА=1,ФОРМАТ=13,ЧПО3=3))SOURCG(ВИД=ВХОД-ВЫХОД,ФОРМАТ=ИСТОЧНИК-01,РАЗМЕЩЕНИЕ=КАНАЛ(НОМЕР=7), РАЗМЕЩЕНИЕ-Н.К.=ПК(НОМЕР=1,СМЕЩЕНИЕ=18,ДЛИНА=1,FORMAT=13,ЧПО3=3))HEAEND/С ТЕЛО МОДУЛЯ ROZ6BODY ROZBOD(TRANSL=FOREX,PERSO=420020)/R ROZ6MBODENDUNIT ROZ6MSUBROUTINE ROZ6M.
. . . . . . . . . . . . . . . . . . .ENDUNIEND4.5. ПреобразовательПреобразователь обеспечивает передачу и преобразование группыР1,...,Рm входных данных преобразователя (т.е. выходных параметровмодулей) в группу Рm+1,...,Рn, выходных данных преобразователя (т.е.входных параметров модулей).
При построении расчетной цепочки вобращении к преобразователю указываются только эти параметры (Р1,...,Рn).Однако исходными данными для работы программы преобразователяслужат не только значения выходных (Р1,...,Рm) параметров модулей, но изначения описанных в заголовках модулей характеристик всех (Р1,...,Рn)параметров, участвующих в обращении к преобразователю. Всенеобходимые преобразователю исходные данные указываются в заголовкепреобразователя и передаются программе преобразователя черезспециальный COMMON-блок.Преобразователь в целом и тело преобразователя описываются на языкесистемы ПНФ точно так же, как и модуль и его тело (см.п.4.4).
Однакозаголовок преобразователя не похож на заголовок модуля. Он имеет видHEADER <имя заголовка преобразователя>COND <условие применимости преобразователя>INITIAL <список исходных данных>ASSIGN <список присваиваний>HEAENDЗдесь <условие применимости преобразователя> представляет собойлогическое выражение, истинность которого означает, что преобразовательприменим к заданной совокупности параметров модулей; <список исходныхданных> и <список присваиваний> определяют данные, передаваемыепрограмме преобразователя через специальный COMMON-блок.Логическое выражение в условии применимости состоит из отношений,связанных между собой логическими операциями («.AND.», «.OR.» и«.NOT.») с использованием круглых скобок. Например, логическоевыражениеФОРМАТ(1) .EQ.
ИСТОЧНИК-Ql .AND.ФОРМАТ(2) .EQ. ИСТОЧНИК-Q2определяет, что форматом первого (в списке Р1,...,Рn) параметрапреобразователя может быть только формат ИСТОЧНИК-Ql, а второго ИСТОЧНИК-Q2.Синтаксис отношения имеет вид<отношение> ::= <операнд> .EQ. <операнд><операнд> ::= <атрибут> | <слово> | <целое><атрибут> ::= <имя характеристики>[<объект>]( <параметр>)<параметр> ::= <целое>Здесь <атрибут> задает значение характеристики с именем <имяхарактеристики> для модульного параметра, который имеет номер<параметр> в списке Р1,...,Рm параметров преобразователя.
Если <объект> ватрибуте опущен, то объектом является сам модульный параметр, иначе вспомогательный объект (см.п.4.3), введенный в заголовке модуля приописании этого параметра.Вслед за условием применимости в заголовке преобразователязаписываются список имен исходных данных для программыпреобразователя и предложение ASSIGN, в котором этим даннымприсваиваются значения.В списке исходных данных через запятую перечисляются именаисходных данных в том порядке, в каком они располагаются в COMMONблоке, используемом программой преобразователя.
Если среди исходныхданных встречаются массивы, то указывается их длина, т.е. элемент спискаисходных данных имеет вид<имя элемента>[<длина массива>]Синтаксис списка присваивании, задаваемого в предложении ASSIGN,имеет вид<список присваиваний> ::= <группа>[,<группа>]<группа> ::= <простая группа> | <условная группа><простая группа> ::= <присваивание>[,<присваивание>]...<условная группа> ::= IF логическое выражение>THEN (<простая группа>)[ELSE (<простая группа>)]<присваивание> ::= <имя элемента>=<правая часть><правая часть> ::= <атрибут> | (<параметр>) |<слово> | <целое>Здесь <логическое выражение>, <атрибут> и <параметр> имеют тот жесмысл, что и в описанном выше предложении COND, а <имя элемента> - имяэлемента исходных данных из предложения INITIAL.Присваивания атрибута, слова и целого выполняются очевиднымобразом.
Появление в правой части присваивания конструкции (<параметр>)означает, что исходным данным присваивается значение модульного(выходного) параметра с номером <параметр> в списке Р1,...,Рm.При выполнении условной группы вычисляется логическое выражениеи в зависимости от его истинности выполняется та или иная группаприсваиваний.В качестве примера приведем описание одного из преобразователей,использующихся для реакторных расчетов./С ОПИСАНИЕ ПРЕОБРАЗОВАТЕЛЯ TRZMODULE TRZ(MAIN=TRZM)/R TRZHDR/R TRZBODMODEND/С ЗАГОЛОВОК ПРЕОБРАЗОВАТЕЛЯHEADER TRZHDRCOND ФОРМАТ(1) .EQ. ИСТОЧНИК-Q1 .AND.ФОРМАТ(2) .EQ.
ИСТОЧНИК-Q2 INITIAL NTVK2D,NOKS,NROZ6ASSIGNIF РАЗМЕЩЕНИЕ(1) .EQ. КАНАЛ THEN NRQZ6=HOMEP КАНАЛ(1)IF РАЗМЕЩЕНИЕ(2) .EQ. КАНАЛ THEN NTVK2D=HOMEPКАНАЛ(2)NOKS=4HEAEND/С ТЕЛО ПРЕОБРАЗОВАТЕЛЯBODY TRZBOD (PERSO=370640)BODEND4.6. Фрагменты расчетных цепочекЗаписав в архив разрабатываемого пакета оформленные на языке системыПНФ описания функциональных модулей и преобразователей, пользовательсистемы, вообще говоря, мог бы начинать составление цепочек и проведениерасчетов по ним. Однако оказывается, что для обеспечения простоты,удобства и надежности последующей работы полезен еще одинподготовительный этап - составление фрагментов расчетных цепочек.Использованиефрагментоврасчетныхцепочекпозволяетвестипроизводственные расчеты,практически не задумываясь о технических проблемах сопряжения модулей.Описание фрагмента цепочки имеет видCHAIN <имя цепочки><подпрограмма на языке сборки>CHAENDЯзык сборки представляет собой Фортран, дополненный описаниямиинтерфейсных переменных, операторами вызова функциональныхмодулей и операторами вызова преобразователей.Интерфейсные переменные служат для организации связи междуфрагментами цепочек.