normDDr (1158429), страница 3
Текст из файла (страница 3)
<end line number> ::=<integer>
Эта информация означает, что Норма-предложение с номером <statement number> из Списка Норма-предложений (List of Norma statements) начинается в исходном файле в строке с номером <begin line number> и заканчивается в строке с номером <end line number>.
3.7Таблица последовательных групп (Table of ordered groups).
Таблица последовательных групп (Table of ordered groups) предназначена для хранения информации об операторах Норма-программы, для которых задан режим последовательных вычислений.
Структура Таблицы последовательных групп (Table of ordered groups):
| ordered group |
| ordered group |
| … |
Структура элемента <ordered group>:
|
| statement number | … | statement number |
<statement number> ::=<integer>
Эта информация означает, что для Норма-операторов с номерами <statement number> из Таблицы последовательных групп (Table of ordered groups) задан режим последовательных вычислений.
3.8Список ошибок (List of errors)
Список ошибок (List of errors) предназначен для хранения во внутреннем представлении информации об ошибках и предупреждениях в Норма-программе.
Структура Списка ошибок (List of errors):
|
| errors in lines | … | errors in lines |
Структура элемента errors in lines :
|
| error code | … | error context | error code | begin line number | end line number |
<error context>::=<sequence of token codes>
<error code>::=<integer>
<begin line number> ::=<integer>
<end line number> ::=<integer>
Каждая ошибка представляется парой <error context><error code>.
Элемент errors in lines представляет информацию о наличии всех ошибок с указанными <error context><error code> в строках <begin line number>-<end line number> исходного файла.
Занесение информации об ошибке в Список ошибок (List of errors) осуществляется функцией ero с параметрами
<error context><error code><statement number>
Для ошибок, относящихся к программе в целом, <statement number>=’*’.
3.9Таблица областей (Table of domains)
Таблица областей (Table of domains) предназначена для хранения информации об областях, используемых в Норма-программе. При обработке областей используются также вспомогательные структуры данных: Таблица диапазонов (Table of ranges), Таблица условий (Table of conditions), Таблица диагоналей (Table of diagonals).
Строка Таблицы областей (Table of domains) имеет вид:
| name of domain | shape | indexes | subdomains | conditional |
<name of domain>::=<token code>
<shape>::=<integer>
<indexes>::=<sequence of tokens>
<subdomains>::=<name of domain> OR
<name of range>
<conditional>::=<condition number>Y OR <condition number>N
<shape> - размерность области (число индексов)
<indexes> - список индексов области
<subdomains> - имена элементарных (одномерных) подмножеств, декартово произведение которых составляет данное множество. Если множество само является элементарным (то есть <shape>=1), то <subdomain> является ссылкой на строку дополнительной Таблицы диапазонов (Table of ranges).
<conditional> - пустое поле для безусловных областей; для условных областей содержит ссылку на строку в Таблице условий (Table of conditions) и признак истинности условия: Y - true, N - false. В языке Норма можно определить в одном описании только пару условных областей: первая область соответствует условию со значением true, вторая - условию false. Обработка такого описания приводит к занесению в Таблицу областей (Table of domains) двух строк, которые различаются только признаками Y и N, а ссылки на Таблицу условий (Table of conditions) совпадают.
3.9.1Таблица диапазонов (Table of ranges)
Строка Таблицы диапазонов (Table of ranges) имеет вид:
| name of range | begin of range | end of range |
<name of range>::=<token code>
<begin of range>::=<integer>
<end of range>::=<integer>
3.9.2Таблица условий (Table of conditions)
Строка Таблицы условий (Table of conditions) имеет вид:
| condition body |
<condition body>::=<sequence of tokens>
3.9.3Таблица условных областей (Table of conditional domains)
Строка Таблицы условных областей (Table of conditional domains) имеет вид:
| name-conditional domain | name-conditional-domain | name-domain | ref-on-condition |
<name-conditional domain>::=<token code>
<name-domain>::=<token code>
<ref-on-condition>::=<reference in Table of conditions >
Основные функции, реализующие операции над областями в процессе трансляции и использующие описанные выше структуры.
Функция peres реализует проверку непустоты пересечения двух областей D1, D2.
Аргументы: D1, D2 - D1, D2 are <token code>.
Результат: 0 если D1 D2=
1 если D1 D2
Функция vxodit реализует проверку включения области D1 в D2.
Аргументы: D1, D2 - D1, D2 are <token code>.
Результат: 0 если D1 D2=
1 иначе
3.9.4Таблица диагоналей (Table of diagonals)
Таблица диагоналей (Table of diagonals) предназначена для представления диагональных областей. Синтаксис в языке Норма:
declaration-of-diagonal-domain :
name-diagonal-domain : name-unconditional-domain / list-condition-on-index
condition-on-index :
name-index rel-except-not-equal-operation name-index [{ +,- } const-expression-without-sign]
Строка Таблицы диагоналей (Table of diagonals) имеет вид:
|
| diagonal-index | … | diagonal-index |
<name-diagonal domain>::=<token code>
Структура элемента <diagonal-index>:
| name-index | name-index | displacement | displacement |
<name-index>::=<token code>
<displacement>::=<integer>
В Таблице диагоналей (Table of diagonals) хранится информация о точках пересечения диагоналей вида
name-index1 =name-index2 [{ +,- } const-expression-without-sign]
заданных в системе координат (name-index1, name-index2), с осью координат name-index1 (с учетом вида операции rel-except-not-equal-operation). Этой информации достаточно для того, чтобы определить все точки диагональной области name-diagonal-domain , зная описание области name-unconditional-domain.
Например, в результате обработки описаний
KL: ( (k=1..10) ; (l=1..10) ) . Diagonal: KL/ k=l, k<l+5,k>l+1.
в Таблицу диагоналей (Table of diagonals) будет занесена строка (с точностью до token codes)
|
| k | l | 0 | 0 | k | l | 4 | 2 |
Геометрическая интерпретация области Diagonal:
k k=l+4 k=l+2 k=l
10
4
2
1
0 1 10 l
Область Diagonal состоит из точек с целочисленными координатами, расположенных на прямой k=l или заключенных между прямыми k=l+2 и k=l+4.
3.10Таблица упорядоченных индексов (Table of ordered indexes)
Таблица упорядоченных индексов (Table of ordered indexes) предназначена для фиксации порядка направлений индексного пространства задачи. Порядок направлений индексного пространства совпадает с порядком расположения имен индексов в таблице. Таблица имеет вид:
| index |
| index |
| … |
<index>::=<token code>
3.11Таблица индексов распределения (Table of distribution indexes)
Таблица индексов распределения (Table of distribution indexes) предназначена для хранения информации об именах индексов, по которым ведется распределение данных по процессорам, и соответствующего числа процессоров.
Таблица имеет вид:
| index | number of processors |
| index | number of processors |
<index>::=<token code>
<number of processors>::=<integer>
3.12Таблица функциональных зависимостей (Table of functional dependencies)
Таблица функциональных зависимостей (Table of functional dependencies) предназначена для хранения информационных зависимостей, существующих в операторах Норма-программы. Переменная X зависит от переменной Y, если значение Y требуется для вычисления X в данном операторе. Если для вычисления значений переменной X на некоторой области Domain1 требуются значения переменной Y на области Domain2, то область Domain2 назывется областью требуемых значений (ниже области требуемых значений обозначаются need-domain).
В Таблице функциональных зависимостей (Table of functional dependencies) представлена информация для операторов следующих типов: scalar-operator, operator-ASSUME, call-part, declaration-of-input, declaration-of-output.
Строка Таблицы функциональных зависимостей (Table of functional dependencies) имеет вид:
| left-hand-side-variable | dependencies | ref-on-body |
<ref-on-body>::=<reference in Table of operators body >
Значения поля <left-hand-side-variable> таблицы в зависимости от типа оператора:
| type of operator | left-hand-side-variable |
| scalar-operator | <statement number><variable>’S’ |
| operator-ASSUME | <statement number><variable><name-domain> |
| input-scalar | <statement number><variable>’SV’ |
| input-on-domain | <statement number><variable><name-domain>’V’ |
| output-scalar | <statement number><variable>’SO’ |
| output-on-domain | <statement number><variable><name-domain>’O’ |
| exit-condition | <statement number>’VS’ |
| call-part | <statement number>’R’ |
<statement number> ::=<integer>
<variable>::=<token code>
statement number
error context
name-diagonal domain














