normDDr (1158429), страница 10
Текст из файла (страница 10)
INPUT list-input-scalar
INPUT input-on-domain
input-scalar :
name-scalar [ attributes ]
input-on-domain :
list input-output-variable ON unconditional domain
input-output-variable :
name-variable-on-domain [ attributes ]
Функция получает очередное описание входных переменных из группы e Cписка Норма предложений (List of Norma statements), вызывая функцию kbin.
Общая структура управления функции opiska приведена на следующей схеме.
pack
obpbxs doplef
k
bbxo obpbx
obpsc zapf dopkdc dopgdc
pack
Функция obpbx выделяет очередной элемент list-input-output-variable или list-input-scalar и в зависимости от типа этого элемента вызывает функцию obpbxs или obpsс. При выделении очередного элемента выполняется операция kba=kba+1, то есть список ввода разбивается на отдельные предложения, каждое из которых получает свой statement number.
Функция фиксирует ошибку:
error code 201 'incorrect element list of input variables'<error context>
Функция obpbxs обрабатывает input-output-variable ON unconditional domain. Эта конструкция рассматривается как оператор с пустой правой частью.
Функция pack осуществляет обработку атрибутов ввода-вывода и занесение информации об атрибутах в Таблицу форматов ввода-вывода (Table of input-output formats).
Функция фиксирует ошибки:
error code 234 'incorrect format: missed characteristic in specifier of format'
error code 235 'incorrect format: missed index'<error context>'from attribute ORDER'
error code 236 'incorrect format: missed , after attribute'
error code 237 'incorrect format: incorrect attribute '<error context>
error code 238 'incorrect format: attribute ORDER must be unic'
error code 239 'incorrect format: attribute FILE must be unic'
error code 240 'incorrect format: missed attribute ORDER'
error code 241 'incorrect format: scalar variable'<error context>'has attribute ORDER'
error code 242 'incorrect format: variable'<error context>'has not index'<error context>
error code 243 'incorrect format: missed attribute STR'
error code 244 'incorrect format: attribute format must be uni'
error code 245 'incorrect format: missed = in attribute FILE'
error code 246 'incorrect format: missed file name in attribute FILE'
error code 247 'incorrect file name'
error code 248 'incorrect format: forbidden attribute for INPUT'
error code 256 'incorrect format: '<error context>' is not index'
error code 266 'incorrect format: repeated attribute ALL'
error code 269 'incorrect format: forbidden attribute for variable on domain in OUTPUT'
error code 270 'incorrect format: forbidden attribute for scalar in OUTPUT'
error code 276 'incorrect format: attribute STR or TAB or SPACE is not integer'
error code 277 'incorrect format: missed . in attribute format'
Функция doplef осуществляет проверку допустимости переменной в левой части оператора. Эта переменная должна быть описана как переменная, определенная на области, а область определения должна включать область оператора.
Функция фиксирует ошибки:
error code 411 'incorrect declaration or using variable'<error context>
error code 77 'domain of operator is not in declaration domain of variable' <error context>
error code 78 'indexes'<error context>' of variable '<error context>' are not indexes’ <error context>' of operator domain'
error code 79 'dimension'<error context>' of variable '<error context>' is not equal ot dimension’ <error context>' of operator domain'
Функция obpsc обрабатывает input-scalar. Эта конструкция рассматривается как оператор с пустой правой частью.
Функция zapf заносит информацию об очередном элементе списка ввода в Таблицу функциональных зависимостей (Table of functional dependencies) и тело элемента списка ввода в Таблицу тел операторов (Table of operators body).
Функция dopkdc заносит информацию об очередном элементе списка ввода в Таблицу ‘Что-вычисляется’ (What-compute table).
Функция dopgdc заносит информацию об очередном элементе списка ввода в Таблицу ‘Где-вычисляется’ (Where-compute table).
5.3.4Обработка предложений группы f (Функция kbbyx)
Осуществляет анализ и обработку declaration-of-output. Синтаксис в языке Норма:
declaration-of-output :
OUTPUT list-output-scalar
OUTPUT output-on-domain
output-scalar :
name-scalar [ attributes ]
output-on-domain :
list- input-output-variable ON domain
input-output-variable :
name-variable-on-domain [ attributes ]
Функция получает очередное описание выходных переменных из группы f Cписка Норма предложений (List of Norma statements) вызывая функцию kbout.
Общая структура управления функции kbbyx приведена на следующей схеме.
pack
obrs vxodit
k
bbyx obpbyb
obrsc zapf dopkdc
pack
Функция obpbyb выделяет очередной элемент list input-output-variable или list-output-scalar и в зависимости от типа этого элемента вызывает функцию obrs или obrsс. При выделении очередного элемента выполняется операция kba=kba+1, то есть список вывода разбивается на отдельные предложения, каждое из которых получает свой statement number.
Функция фиксирует ошибку:
error code 200 'incorrect element list of output variables'<error context>
Функция obprs обрабатывает input-output-variable ON domain. Эта конструкция рассматривается как оператор с пустой левой частью.
Функция фиксирует ошибки:
error code 411 'incorrect declaration or using variable'<error context>
error code 205 'domain of output variable'<error context>’is not in declaration domain’
Функция pack осуществляет обработку атрибутов ввода-вывода и занесение информации об атрибутах в Таблицу форматов ввода-вывода (Table of input-output formats) (см. п.).
Функция vxodit осуществляет проверку допустимости переменной в правой части оператора.
Функция obpsc обрабатывает input-scalar. Эта конструкция рассматривается как оператор с пустой левой частью.
Функция фиксирует ошибку:
error code 411 'incorrect declaration or using variable'<error context>
Функция zapf заносит информацию об очередном элементе списка вывода в Таблицу функциональных зависимостей (Table of functional dependencies) и тело элемента списка вывода в Таблицу тел операторов (Table of operators body).
Функция dopkdc заносит информацию об очередном элементе списка вывода в Таблицу ‘Что-вычисляется’ (What-compute table).
5.3.5Обработка предложений группы g (Функция kvopr1)
Осуществляет анализ и обработку конструкции operator. Синтаксис в языке Норма:
operator :
scalar-operator
operator-ASSUME
call-part
Функция получает очередной оператор из группы g Cписка Норма предложений (List of Norma statements) вызывая функцию kbfor.
Результат работы функции - запись информации о переменной (переменных), вычисляемой в операторе, в Таблицу функциональных зависимостей (Table of functional dependencies), Таблицу ‘Что-вычисляется’ (What-compute table), Таблицу ‘Где-вычисляется’ (Where-compute table), и запись тела оператора в Таблицу тел операторов (Table of operators body). Если в результате анализа оператора обнаружены ошибки, запись не проводится.
При обработке любого оператора используются стеки nom и mom. Вершина стека nom содержит statement number оператора, обрабатываемого в данный момент. Вершина стека mom содержит name-domain оператора, обрабатываемого в данный момент (для scalar-operator стек scalar-operator в начальный момент пуст).
Общая структура управления функции kvopr1 приведена на следующей схеме.
scop
k
vopr1 opv6
kvo2
Функция kvopr1 в зависимости от типа оператора вызывает функцию scop (обработка scalar-operator), opv6 (обработка operator-ASSUME) или kvo2 (обработка call-part в operator-ASSUME или вне operator-ASSUME).
Функция фиксирует ошибки:
error code 80 'incorrect left side of operator ASSUME: '<error context>' can not have indexes'
error code 415 'incorrect operator'
5.3.5.1Функция scop - обработка scalar-operator
Синтаксис в языке Норма:
scalar-operator :
name-scalar = scalar-arithm-expression
Общая структура управления функции scop приведена на следующей схеме.
s
cop doplfs a b1 zapf dopkdc dopgdc
Функция doplfs осуществляет проверяет допустимости переменной в левой части scalar-operator.
Функция фиксирует ошибку:
error code 72 'incorrect scalar-operator '<error context>
Остальные функции обрабатывают правую часть scalar-operator.
Функция a строит польскую запись для арифметического выражения правой части оператора. Если при этом обнаружены ошибки, обработка оператора прекращается.
Функция фиксирует ошибку:
error code 75 'incorrect expression'<error context>
Функция b1 осуществляет проверку допустимости термов скалярного арифметического выражения, представленного в польской записи. Термами могут быть scalars, arithmetical constants, domain’s parameters, function calls, variables on domain with index-constants. Для термов этих типов формируется строка для записи в Таблицу функциональных зависимостей (Table of functional dependencies).















