Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     12 Выражения


Выражения являются комбинациями операторов, операндов и вызовов функций, которые вычисляются для получения некоторого значения.

   Синтаксис:

216

expression = simple_expression [ rel_op_extended simple_expression ] .

283

rel_op_extended = rel_op | IN | LIKE .

282

rel_op = ' < ' | ' > ' | ' <= ' | ' >= ' | ' <> ' | ' = ' | ' :<>:' | ' :=: ' .

305

simple_expression = term { add_like_op term } .

325

term = factor { multiplication_like_op factor } .

217

factor = simple_factor [ ' ** ' simple_factor ] .

306

simple_factor = aggregate_initializer | entity_constructor |

enumeration_reference | interval | query_expression |
( [ unary_op ] ( ' ( ' expression ' ) ' | primary ) ) .

331

unary_op = ' + ' | ' - ' | NOT .

269

primary = literal | (qualifiable_factor { qualifier } ) .

257

multiplication_like_op = ' * ' | ' / ' | DIV | MOD | AND | ' | | ' .

168

add_like_op = ' + ' | ' - ' | OR | XOR .


Некоторым операторам требуется один операнд, а другим - два операнда. Оператор, которому требуется только один операнд, должен располагаться перед своим операндом. Оператор, которому требуются два операнда, должен располагаться между своими операндами. В данном разделе определены операторы и установлены типы данных операндов, которые могут использоваться каждым оператором.

Существует семь классов операторов:

a) Арифметические операторы принимают числовые операнды и выдают числовые результаты. Тип данных значения результата арифметического оператора зависит от оператора и типов данных операндов (см. 12.1).

b) Операторы отношения принимают в качестве операндов разные типы данных и выдают результаты, имеющие тип данных LOGICAL (TRUE, FALSE или UNKNOWN).

c) Двоичные операторы принимают операнды типа данных BINARY и выдают результаты, имеющие тоже тип данных BINARY.

d) Логические операторы принимают операнды типа данных LOGICAL и выдают результаты, имеющие тоже тип данных LOGICAL.

e) Строковые операторы принимают операнды типа данных STRING и выдают результаты, имеющие тоже тип данных STRING.

f) Агрегированные операторы комбинируют агрегированные значения с другими агрегированными значениями или с отдельными элементами разными способами и выдают результаты агрегированного типа.

g) Ссылочные и индексные операторы извлекают компоненты из экземпляров объектов и агрегированных значений.

Вычисление выражений осуществляется в соответствии с приоритетом входящих в выражение операторов.

Значение выражения, заключенного в круглые скобки, вычисляется до того, как оно будет трактоваться как единый операнд.

Процесс вычисления осуществляется слева направо, при этом операторы с более высоким приоритетом вычисляются первыми. Правила приоритетов для всех операторов языка EXPRESS установлены в таблице 10. Операторы в одной строке имеют одинаковый приоритет, а строки упорядочены по уменьшению приоритета.


Таблица 10 - Приоритет операторов

Приоритет

Описание

Операторы

1

Ссылки на элементы

[ ] . \

2

Унарные операторы

+ - NOT

3

Возведение в степень

**

4

Умножение/деление

* / DIV MOD AND | |

5

Сложение/вычитание

- + OR XOR

6

Отношение

= <> <= >= < > :=: :<>: IN LIKE

Примечание - | | является оператором построения сложного объекта.



Операнд, расположенный между двумя операторами, имеющими разные приоритеты, относится к оператору, имеющему более высокий приоритет. Операнд, расположенный между двумя операторами с одинаковым приоритетом, относится к оператору, расположенному слева.

Пример - Выражение -10**2 вычисляется как (-10)**2, давая в результате значение 100. Выражение 10/20*30 вычисляется как (10/20)*30, давая в результат значение 15.0.