C++. Бархатный путь Выражение

Автор: manager Воскресенье, Март 23rd, 2008 Нет комментариев

Рубрика: C++. Бархатный путь

Выражение ::= ВыражениеПрисваивания
::= Выражение , ВыражениеПрисваивания

В контексте, где запятая выступает в роли разделителя, например, списке параметров вызова функции или в списке инициализации, запятая как знак операции может появиться только в круглых скобках:
MyFun(a, (w = 5, w + 9), c)

/* Выражение вызова функции с тремя параметрами. Значение второго параметра
задаётся выражением, значение которого равно 14. */

Большая часть выражений представляет собой сочетание символов операций и операндов. Однако это вовсе не означает, что в ходе вычисления значения подобных выражений непременно будут применяться соответствующие операции. Выражение — это видимость. В каждом конкретном случае всё зависит от типа операндов. Если операнды оказываются операндами основного типа, либо указателями, то можно предположить, что при вычислении его значения будет выполняться конкретная операция C++. Если же операнды выражения оказываются операндами производного типа, символ операции может оказаться эквивалентным вызову операторной функции. И кто знает, что делает эта самая операторная функция.
Выражения присваивания

ВыражениеПрисваивания ::= УсловноеВыражение
::= УнарноеВыражение ОперацияПрисваивания ВыражениеПрисваивания
ОперацияПрисваивания ::= = | *= | /= | %= | += | -= |
>>= | <<= | &= | ^= | |=

Условные и логические выражения

УсловноеВыражение ::= ВыражениеИлиЛогическое
::= ВыражениеИлиВключающее ? Выражение : УсловноеВыражение
ВыражениеИЛогическое ::= ВыражениеИлиВключающее
::= ВыражениеИЛогическое && ВыражениеИлиВключающее
ВыражениеИлиЛогическое ::= ВыражениеИЛогическое
::= ВыражениеИлиЛогическое || ВыражениеИЛогическое

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

ВыражениеИлиВключающее ::= ВыражениеИлиИсключающее
::= ВыражениеИлиВключающее | ВыражениеИлиИсключающее
ВыражениеИлиИсключающее ::= ВыражениеИ
::= ВыражениеИлиИсключающее ^ ВыражениеИ
ВыражениеИ ::= ВыражениеРавенства
::= ВыражениеИ & ВыражениеРавенства

Выражения равенства

ВыражениеРавенства ::= ВыражениеОтношения
::= ВыражениеРавенства == ВыражениеОтношения
::= ВыражениеРавенства != ВыражениеОтношения

Выражения отношения

ВыражениеОтношения ::= ВыражениеСдвига
::= ВыражениеОтношения ВыражениеСдвига
::= ВыражениеОтношения = ВыражениеСдвига

Выражения сдвига

ВыражениеСдвига ::= АддитивноеВыражение
::= ВыражениеСдвига <> АддитивноеВыражение

Аддитивные выражения

АддитивноеВыражение ::= МультипликативноеВыражение
::= АддитивноеВыражение + МультипликативноеВыражение
::= АддитивноеВыражение — МультипликативноеВыражение

Мультипликативные выражения

МультипликативноеВыражение ::= pmВыражение
::= МультипликативноеВыражение * pmВыражение
::= МультипликативноеВыражение / pmВыражение
::= МультипликативноеВыражение % pmВыражение

Выражения с указателями

pmВыражение ::= ВыражениеПриведения
::= pmВыражение .* ВыражениеПриведения
::= pmВыражение ->* ВыражениеПриведения

Выражение приведения

Для преобразования данного значения к определённому типу используется выражение явного преобразования (одна из разновидностей постфиксного выражения). Оно имеет вид функциональной формы записи: имя типа, за которым в скобочках записывается список выражений.
Кроме того, в C++ существует каноническая форма записи выражения приведения.
ВыражениеПриведения ::= УнарноеВыражение
::= (ИмяТипа) ВыражениеПриведения

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

Унарное выражение

УнарноеВыражение ::= ПостфиксноеВыражение
::= ++ УнарноеВыражение
::= — УнарноеВыражение
::= УнарнаяОперация ВыражениеПриведения
::= sizeof УнарноеВыражение
::= sizeof (ИмяТипа)
::= ВыражениеРазмещения
::= ВыражениеОсвобождения
УнарнаяОперация ::= * | & | + | — | ! | ~

Унарные выражения группируются справа налево.

Вторая и третья БНФ являются основой для построения префиксных выражений увеличения и уменьшения (инкремента и декремента). Символ операции в выражении инкремента и декремента вовсе не означает, что в ходе вычисления значения выражения к операндам будут применяться операции уменьшения и увеличения. В сочетании с операндами производных типов определение значений этих выражений сопровождается вызовами специальных (операторных) функций.

В выражениях, представленных четвёртой БНФ, унарная операция * является операцией разыменования. Типом выражения приведения является указатель на объект типа X, а это указывает на то, что описываемое значение является l-выражением. Значением выражения является значение размещённого в памяти объекта. Если типом операнда является тип указатель на объект типа X, то типом выражения является непосредственно тип X.
Результатом операции & является адрес объекта, представленного операндом. При этом операнд операции может оказаться либо l-выражением, либо квалифицированным именем. Но об этом позже.

Далее приводится множество БНФ, определяющих синтаксис выражений размещения и освобождения. У этих выражений достаточно сложная семантика. Детально разобрать их в данный момент мы пока просто не сможем. На этом этапе придётся ограничиться лишь самыми необходимыми сведениями.
Выражение размещения

ВыражениеРазмещения

::= [::] new [Размещение] ИмяТипаNew [ИнициалиьЅІтDЬcNЬЪ{‘iF+(00"1n[bиЖ°8#!4’Ищee D°ыWµИСcss«U``ОЙћ
aerІт
›ыНУЏ‡ш`,д‰є`'6ьGОn#91&Р?|›tа}ґжэиРИаР„уFгPB$+zМљ"‘ь”\ѓ'%oЙКЄ") ”‘–vj`x!ЛвeтІш"587й.аeаd—КЌЈЈWЁ$XbіN_=ЯЦv¶ЮhнRл Щ|j:'_PT)Х›§п«‹‹чжef&egжE'
Ќzl+@ї»MЈ6iд»И8,.eЇaT.WfYEЙњЅа,ЄЄ^$’jIЏИМЬЉ’VнЇМЙВ!¬”ьјВІFхиC‡¦ф@й{yI,Ft +‘С|>Е5в]щЪwЭЯuЗё899“|ј§ЫR(ш˜йoњR0eЉ¤ЌЗez
a}шf^с™vД>’KbffпN;pјЯ4sїWPUщ^^tМЖиррDлP›Ъц­­ФЫГЫЯЭХЩЩХУ;Pй8ъЗoЪвCыЉщаР©±EQУA%xErТХ

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты

  • Похожие посты отсутствуют