Сложные выражения в правилах выравнивания CDVMH

Компилятор CDVMH в данный момент допускает правила выравнивания строго в форме a*i+b. При этом порядок слагаемых важен, индексная переменная i не может размещаться в скобках, а коэффициент aи свободный член bдолжны быть единым выражением. Таким образом, если aили b не являются неотрицательными константами, то их необходимо поместить внутрь скобок (...).

Например, корректная запись директивы должны иметь вид:

#pragma dvm parallel ([i][j][k] on A[(-1) * i + (L-2)][j][k])

В этом случае aполучает значение -1, а bполучает значение L-2.

Следующие директивы ошибочны:

// Ошибка выполнения программы - неправильная запись правила выравнивания.
#pragma dvm parallel ([i][j][k] on A[L-2-(i)][j][k])

Все выражение L-2-(i)будет рассматриваться компилятором как одно выражение (инвариантное для цикла) в правиле выравнивание, i индексная переменная не будет обнаружена и выравнивания на итерацию цикла не будет. При этом такая программа может компилироваться успешно, но работать будет некорректно.

// Ошибка компиляции программы - неправильная запись правила выравнивания.
#pragma dvm parallel ([i][j][k] on A[L-2-i][j][k]

Будет выдана синтаксическая ошибка разбора данного выражения вида error #3431: Syntax error in mapping specification. Invalid axis mapping rule at column ....