Редактор ограничений

Синтаксис операторов ограничений

Синтаксис операторов ограничений - это подмножество синтаксиса Инструментария системы LN. Операторы ограничений могут быть составлены при помощи следующих инструкций.

Арифметические операторы:

  • * (умножение)
  • / (деление)
  • + (сложение)
  • - (вычитание)
  • \ (остаток после деления)
  • & (связывание алфавитно-цифровых массивов)

Логические операторы:

  • or
  • and
  • not

Операторы отношения:

  • = (равно)
  • > (больше чем)
  • >= (больше чем или равно)
  • <> (не равно)
  • < (меньше чем)
  • <= (меньше чем или равно)
Выражение домена

A равно {a1,a2,a3-a4,..} означает: (A=a1 or A=a2 or A >= a3 и A <= a4 и т.д.).

Синтаксис операторов доменов заключается в использовании аббревиатур для логических операторов с учетом домена переменной.

Приоритет в выражениях

Арифметические операторы имеют более высокий приоритет, чем операторы отношения.

Операторы отношения имеют более высокий приоритет, чем логические операторы.

Последовательность приоритетов для арифметических операторов: * / \ + -

Приоритетной последовательности для логических операторов: not, and, or

Круглые скобки ('()') используются для изменения последовательности приоритетов для арифметических и логических операторов.

Пример

3 + 4 * 5 = 23

(3 + 4) * 5 = 35

Булевы операторы

Булевы операторы принимают значение истинный-ложный (1 или 0). Они применяются в ограничениях, в особенности в операторах с использованием условий.

Пример

If not e then ' означает:

If e = ложно тогда'

или если e = 0, то '

Конструкции if-then-else

В ограничениях могут быть использованы длинные конструкции типа if-then-else. Разрешена вложенность операторов.

Конструкция if-then-else всегда оканчивается оператором endif. Оператор else не является обязательным. Операторы if, else и endif всегда начинаются с новой строки. Выражения условий могут быть записаны в несколько строк. Ограничение подтверждения можно задать без операторов if-then-else; это ограничение должно начинаться так: c:.

Ограничения могут сопровождаться комментариями, отделенными символом |. В процессе конфигурации можно сгенерировать сообщения при помощи переменных сообщений (до 80x25 строк текста).

Пример

If expression1

then expression2

else expression3

endif

Переменные ограничений

В операторах ограничений могут быть использованы как глобальные, так и локальные переменные. Глобальные переменные - это свойства продукта и пользовательские переменные ограничений, определенные как глобальные. Локальными являются предопределенные переменные конфигуратора продукта, такие, как input, display, length, width и т.д. Глобальные переменные сохраняют свои значения в течение всего процесса конфигурации, если только это значение не изменяют.

Переменные ограничений имеют следующие типы:

  • string (буквенно-цифровая) (например: string machine global)
  • long (целое) (например: long i)
  • double (дробное) (например: double j)

Пользовательские переменные ограничений должны всегда находиться в верхней части ограничений. Все локальные переменные инициализируются до выполнения ограничений: буквенно-цифровые переменные очищаются, численные получают нулевые значения. Глобальные переменные input и validating инициализируются значением "истинный" (true).

Использование переменных ограничений

Свойства продукта в операторах ограничений задаются при помощи открывающихся и закрывающихся квадратных скобок ([......]). Прочие переменные напрямую используются в операторах. Буквенно-цифровые переменные (строковые ряды) помечаются в соответствии с записью: (startposition[;length]).

Пример

[color] = "red"

validating = true

Значения переменных могут быть буквенно-цифровыми или числовыми. Буквенно-цифровые записываются в кавычках ("...."). Численные значения вводятся напрямую. Десятичным разделителем служит точка ('.').

Пример

machine(1;2) = "A5"

volume = 28.673

Константы true/false используются в булевых операторах.

Арифметические функции
  • round(X,Y,Z): округленное значение X; Y - число десятых долей, Z - метод округления (0 = в меньшую сторону, 1 = нормальный, 2 = в большую сторону)
  • val(A) : численное значение строки A (val("8.7") = 8.7)
  • abs(X) : абсолютное значение для X (abs(-10,3) = 10,3)
  • int(X) целое значение для X (int(11,6) = 11 )
  • pow(X,Y) возведение X в степень Y (pow(10,2) = 100)
  • sqrt(X) : корень для X (sqrt(16) = 4 )
  • min(X,Y) наименьшее значение для X и Y (min(6,10) = 6 )
  • max(X,Y) наибольшее значение для X и Y (max(6,10) = 10 )
  • pi : константа со значением PI (3.1415926...)
Тригонометрические функции
  • sin(X), cos(X), tan(X) : синус, косинус или тангенс X (радианы)
  • asin(X), acos(X), atan(X): арксинус, арккосинус или арктангенс X
  • hsin(X), hcos(X), htan(X): гиперболический синус, косинус или тангенс X
Логарифмические функции
  • exp(X) : возведение e в степень X
  • log(X) : натуральный логарифм X по основанию e
  • log10(X): логарифм X по основанию 10
Строковые функции
  • edit(X,Y) : форматирование численного значения X в соответствии с форматом Y (edit(10.3,"ZZZ9V.99") = " 10.30"
  • str(X) : помещение численного значения в строку (str(10.3) = "10.3")
  • len(X) : определение длины строки X (len("abc") = 3)
  • strip(X) : удаление пробела после последнего символа (strip("A ") "A")
  • pos(X,Y) : позиция Y в строке X слева
  • rpos(X,Y) : позиция Y в строке X справа
Функции даты
  • date() : число дней от даты 0 до текущей даты
  • date(y,m,d): число дней от даты 0 до введенной даты
Пример

date(1995,06,01) = 728445