normDDr (1158429), страница 8
Текст из файла (страница 8)
error code 111 'incorrect using #...#''
error code 63 'iteration index <error context>' differs from index of '<error context>
5.2.9Обработка Норма-предложения(Функция kbaht)
Предложение в виде последовательности лексем заносится в соответствующую группу Списка Норма-предложений (List of Norma statements) функцией writetab.
Общая структура управления функции kbaht приведена на следующей схеме.
k
baht writetab in_kwant
cooth
Оператор ASSUME, состоящий из нескольких соотношений, разбивается функцией cooth на предложения, число которых равно числу соотношений. Каждое предложение получает уникальный statement number.
Функция writetab определяет группу Списка Норма-предложений (List of Norma statements) (group a-g), в которую надо включить предложение, и определяет очередной statement number (увеличивая счетчик kba=kba+1).
Функция in_kwant
-
проверяет правильность скобочной структуры (скобки ‘(’ и ‘)’, ‘[’ и ‘]’) в рассматриваемом предложении,
-
заносит предложение в соответствующую группу Списка Норма-предложений (List of Norma statements),
-
заносит в Таблицу соответствия предложения-строки (Statements-lines table) строку:
| statement number | bline | eline |
и устанавливает значение bline=eline,
4) если задан режим последовательных вычислений (seq=-1), заносит в Таблицу последовательных групп (Table of ordered groups) statement number.
Функция in_kwant фиксирует ошибку:
error code 401 'open bracket '<error context>
5.2.10Остановка компиляции(Функция StopCompile)
1) glob=glob+osh, globw=globw+osh1
2) Для вывода сообщений о результатах трансляции вызывается функция errprogr блока Listing generator
5.2.11Завершение лексического анализа(Функция EndLex)
Завершает работу блока лексического анализа и осуществляет передачу информации для обработки на последующих этапах трансляции. Вызывает функции следующих блоков транслятора.
Общая структура управления функции приведена на следующей схеме.
E
ndLex table_it_struct parser listing
graf
erroutall forprint erroutall isiofile
exit_part_compile
Функция table_it_struct преобразует Список итераций (List of iterations) в Таблицу структуры итераций (Table of iterations structure).
Функция parser - входная точка блока Part unit parser, (обработка описаний, операторов, итераций),
Функция listing - входная точка блока Listing generator (вывод текста исходной программы и сообщений компилятора после синтаксического анализа),
Функция graf - входная точка блока Data dependencies graph builder,
Функция erroutall - входная точка блока Listing generator (вывод сообщений компилятора после построения и анализа графа информационных зависимостей Data dependencies graph, построения Fortran-программы),
Функция forprint - входная точка блока Fortran DVM code generator (генерация текстового представления выходной Фортран-DVM программы).
Функция isiofile - входная точка блока Input files analyser (анализ файлов ввода данных).
Функция exit_part_compile - входная точка блока Exit part unit compilation.
5.3Синтаксический анализ Норма-раздела (Part unit parser).
Синтаксический анализ предложений Норма-программы и перевод их во внутреннее представление. Каждое предложение Норма программы представлено в виде последовательности кодов лексем и уникального номера предложения. После анализа заполняются соответствующие структуры данных компилятора.
Общая структура управления блока Part unit parser приведена на следующей схеме.
p
arser kvpar1 kvop1 kbbxo kbbyx
kvopr1 kbiter
5.3.1Обработка предложений группы а(Функция kvpar1)
Обработка описаний DOMAIN PARAMETERS, INDEX. Синтаксис в языке Норма:
declaration-of-domain-parameters :
DOMAIN PARAMETERS list-prescription
prescription :
name-domain-parameter = int-const
declaration-of-domain-indexes :
INDEX list-name-index
Функция получает очередное описание из группы a Cписка Норма предложений (List of Norma statements) вызывая функцию kbpar.
listp
k
vpar1
porind
В зависимости от типа описания вызывается функция listp (обработка DOMAIN PARAMETERS) или функция porind (обработка INDEX).
Функция listp записывает в Таблицу имен (Symbol table), соответствующую информацию о каждом name-domain-parameter (признак ‘P’ и значение int-const).
Функция фиксируют ошибки:
error code 24 'incorrect DOMAIN PARAMETERS '<error context>
error code 25 'value of DOMAIN PARAMETERS '<error context>'is not integer’
Функция porind записывает очередной name-index из списка индексов в Таблицу упорядоченных индексов (Table of ordered indexes) и в Таблицу имен (Symbol table), соответствующую информацию о каждом name-index (признак ‘I’).
Функция фиксируют ошибки:
error code 31 incorrect list element of indexes'.
error code 32 'index '<error context>' declared twice'
error code 33 'incorrect index'<error context>
5.3.2Обработка предложений групп b,c,d(Функция kvop1)
Обработка описаний областей, описаний переменных, DISTRIBUTION INDEX, EXTERNAL, описаний условных областей, - группы b,c,d Cписка Норма предложений (List of Norma statements).
Общая структура управления функции kvop1 приведена на следующей схеме.
k
vop1 opisdom opisdef opiska
Функция opisdom обрабатывает описания безусловных областей. Синтаксис в языке Норма:
declaration-of-unconditional-domain
declaration-of-rectangular-domain
declaration-of-diagonal-domain
Функция получает очередное описание безусловной области из группы b Cписка Норма предложений (List of Norma statements) вызывая функцию kbdomain.
Результат работы функции opisdom - запись информации об области в Таблицу имен (Symbol table), Таблицу областей (Table of domains) и Таблицу диапазонов (Table of ranges), либо запись информации об обнаруженных ошибках в Список ошибок (List of errors).
Общая структура управления функции opisdom приведена на следующей схеме.
condm
o
pisdom
mnoz m
ultidim
onedim
Области в Норма-прогрмме могут иметь имя, либо использоваться без указания имени. В последнем случае компилятор генерирует для области служебное имя. Если область является декартовым произведением нескольких областей (одномерных или многомерных), то в Таблице областей (Table of domains) она представляется как декартово произведение одномерных областей.
5.3.2.1Определение типа описания безусловной области (Функция mnoz)
Осуществляет анализ типа описания безусловной области. Синтаксис в языке Норма:
declaration-of-rectangular-domain :
multidimensional-domain
new-domain
multidimensional-domain :
onedimensional-domain
[ name-multidimensional-domain : ] ( domain-product )
onedimensional-domain :
[ name-onedimensional-domain : ] ( name-index = value )
new-domain :
[ name-new-domain : ] new-domain-without-name
declaration-of-diagonal-domain :
name-diagonal-domain : name-unconditional-domain / list-condition-on-index
В зависимости от типа описания вызывает функции onedim (обработка onedimensional-domain), multidim (обработка multidimensional-domain), condm (обработка new-domain или diagonal-domain).
Функция фиксирует ошибку:
error code 9 'incorrect domain'<error context>
error code 17 'repeated declaration of domain '<error context>
5.3.2.2Обработка описания одномерной области (Функция onedim)
Осуществляет анализ и обработку onedimensional-domain. Синтаксис в языке Норма:
onedimensional-domain :
[ name-onedimensional-domain : ] ( name-index = value )
value :
range
const-expression
range :
const-expression .. const-expression
1) Вычисляются константные выражения const-expression, являющиеся границами диапазонов (функция wyc). Для этого по константному выражению функцией poliz строится польская запись (polish notation), функция wyc1 интерпретирует польскую запись и вычисляет ее значение, функция zapk заносит вычисленные значения в Таблицу констант (Constant table).
2) Информация о диапазоне записывается в Таблицу диапазонов (Table of ranges), информация об области - Таблицу областей (Table of domains), информация о name-onedimensional-domain и name-index - в Таблицу имен (Symbol table), name-index приписывается в Таблицу упорядоченных индексов (Table of ordered indexes), если его там нет.
Функция фиксирует ошибки:
error code 10 'incorrect boundary of range'
error code 8 <error context>' is not DOMAIN PARAMETERS
error code 74 'incorrect scalar expression '<error context>
Функция фиксирует предупреждение:
error code 7 'range for index'<error context>'consists from one point'
5.3.2.3Обработка описания многомерной области (Функция multidim)
Осуществляет анализ и обработку multidimensional-domain. Синтаксис в языке Норма:















