Страница 52 из 82 Унарное выражение УнарноеВыражение ::= ПостфиксноеВыражение ::= ++ УнарноеВыражение ::= -- УнарноеВыражение ::= УнарнаяОперация ВыражениеПриведения ::= sizeof УнарноеВыражение ::= sizeof (ИмяТипа) ::= ВыражениеРазмещения ::= ВыражениеОсвобождения УнарнаяОперация ::= * | & | + | - | ! | ~
Унарные выражения группируются справа налево. Вторая и третья БНФ являются основой для построения префиксных выражений увеличения и уменьшения (инкремента и декремента). Символ операции в выражении инкремента и декремента вовсе не означает, что в ходе вычисления значения выражения к операндам будут применяться операции уменьшения и увеличения. В сочетании с операндами производных типов определение значений этих выражений сопровождается вызовами специальных (операторных) функций. В выражениях, представленных четвёртой БНФ, унарная операция * является операцией разыменования. Типом выражения приведения является указатель на объект типа X, а это указывает на то, что описываемое значение является l-выражением. Значением выражения является значение размещённого в памяти объекта. Если типом операнда является тип указатель на объект типа X, то типом выражения является непосредственно тип X. Результатом операции & является адрес объекта, представленного операндом. При этом операнд операции может оказаться либо l-выражением, либо квалифицированным именем. Но об этом позже. Далее приводится множество БНФ, определяющих синтаксис выражений размещения и освобождения. У этих выражений достаточно сложная семантика. Детально разобрать их в данный момент мы пока просто не сможем. На этом этапе придётся ограничиться лишь самыми необходимыми сведениями. |