ГОСТ Р 53556.5—2013
У каждого оператора есть правила уровней семантики, управляющих уровнем оператора, правила
контекстов уровня, в которых этодопустимо и времена, в которыедолжны выполняться различные субком
поненты.
Чтобы выполнить блок операторов на определенном уровне, каждый оператор в пределах блока
должен выполняться в таком порядке, чтобы это привело к выполнению операторов последовательно в
линейном порядке.
8.66.2 Присвоение
<lvalue>
<lvalue>
•> <ident>
->
<dent> [ <expr> ]
lvalue
или значение левой стороны обозначает сигнальную переменную или переменные, значения
которых должны быть изменены,
lvalue
может быть локальным именем переменной, когда обозначаются
места хранения, связанные с этим именем,
lvalue
может также быть локальным именем массива, когда
обозначается место для хранения массива,
lvalue
может также бытьединственным элементом локального
массива, обозначенным индексом имени локального массива,
lvalue
не должен быть табличной ссылкой
или
tablemap
выражением,
lvalue
не должен быть стандартным именем кроме случаев
MIDIctrl
или
params.
Если
lvalue
обозначит весь массив, то выражение правой стороны присвоения должно обозначаться
массивом с той же длиной или единичным значением, иначе конструкция синтаксически недопустима. В
случае, если
lvalue
зависит от вычисления выражения правой стороны (например, если весь массив
умножается с одним из его элементов),
lvalue
неопределен.
Если
lvalue
обозначает единичное значение, то выражение правой стороны присвоения должно обо
значить единичное значение, иначе конструкция синтаксически недопустима.
Величина
lvalue
является величиной сигнальной переменной, если нет индексации, или величиной
сигнального массива, обозначенного сигнальной переменной и уровнем индексации, если есть индек
сация.
Уровень оператора является уровнем
lvalue,
однако, оператор недопустим, если уровень правой сто
роны быстрее, чем уровень
lvalue.
Присвоениедолжно выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть
оценено правое выражение стороны. Затем местодля хранения, обозначенное
lvalue,
должно быть обнов
лено. чтобы быть равным значению правого выражения. Если
lvalue
обозначит весь массив, и выражение
правой стороны единичное значение, то каждое из значений каждого из элементов массива должно быть
изменено на единичное значение правой стороны.
8.6.6.3 Нулевое присвоение
<statement>-> <ехрг>
Нулевое присвоение содержит только выражение. Это обеспечивают коды операции, у которых нет
полезных возвращаемых значений, и они не использовались в контексте присвоения фиктивной пере
менной.
Уровень оператора является уровнем выражения. Выражение может быть однозначным или оценено
массивом. Это недолжна быть табличная ссылка.
Нулевое присвоение должно выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть
оценено выражение.
8.6.6.4
If
<statement>•> if ( <ехрг>) { <Ыоск> }
If
оператор позволяет условнуюоценку блока программы. Выражение, которое тестируется в
if
опера
торе называют выражением защиты.
Уровень оператора является уровнем выражения защиты или уровнем самого быстрого оператора
в защищенном блоке кода.
Не допустимодля блока программы, которым управляет
if
оператор, содержать операторы медлен
нее. чем выражение защиты. Недопустимо для любого из операторов в блоке программы, которым управ
ляют. содержать коды операции, которые были бы выполнены медленнее, чем выражение защиты.
Выра жение защиты должно быть однозначным выражением.
23