|
||||
|
R.17 Приложение A: Сводка грамматикиЭто приложение не относится к справочному руководству языка и не является определением конструкций C++. Оно только должно служить более полному пониманию С++. Нельзя рассматривать его как точное определение языка, так как описанная здесь грамматика допускает произвольное множество конструкций, каждая из которых законна для С++. Чтобы различать выражения и описания, следует применять правила разрешения неопределенности (§R.6.8, §R.7.1, §R.10.1.1). Далее, для отсеивания синтаксически правильных, но бессмысленных, конструкций следует применять правила контроля доступа, разрешения неопределенности и контроля типа. R.17.1 Служебные словаВ описаниях: typedef (§R.7.1.3), класса (§R.9), перечисления (§R.7.2), шаблона типа - (§R.14) введены новые, зависящие от контекста, служебные слова, а именно: имя-класса: идентификатор имя-перечисления: идентификатор имя-typedef: идентификатор Отметим, что имя-typedef, обозначающее класс, является в то же время конструкцией имя-класса (§R.9.1). R.17.2 Выражениявыражение: выражение-присваивания выражение , выражение-присваивания выражение-присваивания: выражение-условия унарное-выражение операция-присваивания выражение-присваивания операция-присваивания: один из = *= /= %= += -= ››= ‹‹= &= ^= |= выражение-условия: логическое-выражение-ИЛИ логическое-выражение-ИЛИ ? выражение : выражение-условия логическое-выражение-ИЛИ: логическое-выражение-И логическое-выражение-ИЛИ || логическое-выражение-И логическое-выражение-И: выражение-ИЛИ логическое-выражение-И && выражение-ИЛИ выражение-ИЛИ: выражение-исключающего-ИЛИ выражение-ИЛИ | выражение-исключающего-ИЛИ выражение-исключающего-ИЛИ: выражение-И выражение-исключающего-ИЛИ ^ выражение-И выражение-И: выражение-равенства выражение-И & выражение-равенства выражение-равенства: выражение-отношения выражение-равенства == выражение-отношения выражение-равенства != выражение-отношения выражение-отношения: сдвиговое-выражение выражение-отношения ‹ сдвиговое-выражение выражение-отношения › сдвиговое-выражение выражение-отношения ‹= сдвиговое-выражение выражение-отношения ›= сдвиговое-выражение сдвиговое-выражение: аддитивное-выражение сдвиговое-выражение ‹‹ аддитивное выражение сдвиговое-выражение ›› аддитивное выражение аддитивное-выражение: мультипликативное-выражение аддитивное выражение + мультипликативное-выражение аддитивное-выражение - мультипликативное-выражение мультипликативное-выражение: выражение-pm мультипликативное-выражение * выражение-pm мультипликативное-выражение / выражение-pm мультипликативное-выражение % выражение-pm выражение-pm: выражение-приведения выражение-pm .* выражение-приведения выражение-pm -›* выражение-приведения выражение-приведения: унарное-выражение ( имя-типа ) выражение-приведения унарное-выражение: постфиксное-выражение ++ унарное выражение -- унарное выражение унарная-операция выражение-приведения sizeof унарная-операция sizeof ( имя-типа ) выражение-размещения выражение-освобождения унарная-операция: один из * & + - ! ~ выражение-размещения: :: opt new параметры-new opt имя-типа-new инициализатор-new :: opt new параметры-new opt ( имя-типа ) инициализатор-new параметры-new: ( список-выражений ) имя-типа-new: список-спецификаций-типа описатель-new opt описатель-new: * список-спецификаций-cv opt описатель-new opt имя-класса :: список-спецификаций-cv opt описатель-new opt описатель-new opt [ выражение ] инициализатор-new: ( список-инициализаторов opt ) выражение-освобождения: :: opt delete выражение-приведения :: opt delete [ ] выражение-приведения постфиксное-выражение: первичное-выражение постфиксное-выражение [ выражение ] постфиксное-выражение ( список-выражений opt ) имя-простого-типа ( список-выражений opt ) постфиксное-выражение . имя постфиксное-выражение -› имя постфиксное-выражение ++ постфиксное-выражение -- список-выражений: выражение-присваивания список-выражений , выражение-присваивания первичное-выражение: литерал this :: идентификатор :: имя-функции-операции :: уточненное-имя ( выражение ) имя имя: идентификатор имя-функции-операции имя-функции-преобразования ~имя-класса уточненное-имя уточненное-имя: уточняющее-имя-класса :: имя литерал: целая константа символьная константа константа с плавающей точкой строка литералов R.17.3 Описанияописания: спецификации-описания opt список-описателей opt; описание-asm определение-функции спецификация-связи спецификация-описания: спецификация-класса-памяти спецификация-типа спецификация-fct спецификация-шаблона-типа friend typedef спецификации-описания: спецификации-описания opt спецификация-описания спецификация-класса-памяти: auto register static extern спецификация-fct: inline virtual спецификация-типа: имя-простого-типа спецификация-класса спецификация-перечисления спецификация-сложного-типа :: имя-класса const volatile имя-простого-типа: полное-имя-класса уточненное-имя-типа char short int long signed unsigned float double void спецификация-сложного-типа: служебное-слово-класса имя-класса служебное-слово-класса идентификатор служебное-слово-класса: class struct union уточненное-имя-типа: имя-typedef имя-класса :: уточненное-имя-типа полное-имя-класса: уточненное-имя-класса :: уточненное-имя-класса уточненное-имя-класса: имя-класса имя-класса :: уточненное-имя-класса имя-перечисления: идентификатор спецификация-перечисления: enum идентификатор opt { список-перечисления } список-перечисления: элемент-перечисления список-перечисления , элемент-перечисления элемент-перечисления: идентификатор идентификатор = выражение-константа спецификация-связи: extern строка-литерал { список-описаний opt } extern строка-литерал описание список-описаний: описание список-описаний описание описание-asm: asm ( строка-литерал ) ; R.17.4 Описателисписок-описаний: описатель-с-инициализатором список-описаний , описатель-с-инициализатором описатель-с-инициализатором: описатель инициализатор opt описатель: имя-в-описателе операция-ptr описатель описатель ( список-описаний-параметров ) список-спецификаций-cv opt описатель [ выражение-константа opt ] ( описатель ) операция-ptr: * список-спецификаций-cv opt & список-спецификаций-cv opt полное-имя-класса :: * список-спецификаций-cv opt список-спецификаций-cv: const volatile имя-в-описателе: имя имя-класса ~имя-класса имя-typedef уточненное-имя-типа имя-типа: список-спецификаций-типа абстрактный-описатель opt список-спецификаций-типа: спецификация-типа список-спецификаций-типа абстрактный-описатель: операция-ptr абстрактный-описатель opt абстрактный-описатель opt ( список-описаний-параметров ) список-спецификаций_cv opt абстрактный-описатель opt [ выражение-константа opt ] ( абстрактный-описатель ) список-описаний-параметров: список-описаний-парам opt … opt список-описаний-парам , … список-описаний-парам: описание-параметра список-описаний-парам , описание-параметра описание-параметра: спецификации-описания описатель спецификации-описания описатель = выражение спецификации-описания абстрактный-описатель opt спецификации-описания абстрактный-описатель opt = выражение определение-функции: спецификации-описания opt описатель инициализатор-ctor тело-функции тело-функции: составной-оператор инициализатор: = выражение-присваивания = { список-инициализаторов , opt } ( список-выражений ) список-инициализаторов: выражение-присваивания список-инициализаторов , выражение-присваивания { список-инициализаторов , opt } R.17.5 Описания классаспецификация-класса: заголовок-класса { список-членов opt } заголовок-класса: служебное-слово-класса идентификатор opt спец-базовых opt служебное-слово-класса имя-класса спец-базовых opt служебное-слово-класса: class struct union список-членов: описание-члена список-членов opt спецификация-доступа : список-членов opt описание-члена: спецификации-описания opt список-описателей-членов opt ; определение-функции ; opt уточненное-имя ; список-описателей-членов: описатель-члена список-описателей-членов , описатель-члена описатель-члена: описатель спецификация-чистой opt идентификатор opt : выражение-константа спецификация-чистой: = 0 список-базовых: спецификация-базовых список-базовых , спецификация-базовых спецификация-базовых: полное-имя-класса virtual спецификация-доступа opt полное-имя-класса спецификация-доступа virtual opt полное-имя-класса спецификация-доступа: private protected public имя-функции-преобразования: operator имя-типа-преобразования имя-типа-преобразования: список-спецификаций-типа операция-ptr opt инициализатор-ctor: : список-инициализаторов-членов список-инициализаторов-членов: инициализатор-члена инициализатор-члена , список-инициализаторов-члена инициализатор-члена: полное-имя-класса ( список-выражений opt ) идентификатор имя-функции-оператор: operator операция операция : один из new delete + - * / % ^& | ~ ! = ‹ › += -= *= /= %= ^= &= |= ‹‹ ›› ››= ‹‹= == != ‹= ›= && || ++ -- , -›* -› () [] R.17.6 Операторыоператор: помеченный-оператор оператор-выражение составной-оператор выбирающий-оператор оператор-цикла оператор-перехода оператор-описания помеченный-оператор: идентификатор : оператор case выражение-константа : оператор default : оператор оператор-выражение: выражение opt; составной-оператор: { список-операторов opt } список-операторов: оператор список-операторов оператор выбирающий-оператор: if ( выражение ) оператор if ( выражение ) оператор else оператор switch ( выражение ) оператор оператор-цикла: while ( выражение ) оператор do оператор while ( выражение ) for ( оператор-иниц выражение opt ; выражение opt ) оператор оператор-иниц: оператор-выражение оператор-описание оператор-перехода: break ; continue ; return выражение opt ; goto идентификатор ; оператор-описания: описание R.17.7 Препроцессор#define идентификатор строка-лексем #define идентификатор ( идентификатор , … , идентификатор ) строка-лексем #include "имяфайла" #include ‹имяфайла› #line константа "имяфайла" opt #undef идентификатор условное: часть-if части-elif opt часть-else opt строка-endif часть-if: строка-if текст строка-if: # if выражение-константа # ifdef идентификатор # ifndef идентификатор части-elif: строка-elif текст части-elif строка-elif текст строка-elif: # elif выражение-константа часть-else: строка-else текст строка-else: # else строка-endif: # endif R.17.8 Шаблоны типаописание-шаблона-типа: template ‹ список-параметров-шаблона-типа › описание список-параметров-шаблона-типа: параметр-шаблона-типа список-параметров-шаблона-типа , параметр-шаблона-типа параметр-шаблона-типа: параметр-типа описание-параметра параметр-типа: class идентификатор имя-шаблонного-класса: имя-шаблона-типа ‹ список-парам-шаблона-типа › список-парам-шаблона-типа: парам-шаблона-типа список-парам-шаблона-типа , парам-шаблона-типа парам-шаблона: выражение имя-типа R.17.9 Обработка особых ситуацийпроверяемый-блок: try составной-оператор список-обработчиков список-обработчиков: обработчик список-обработчиков opt обработчик: catch ( описание-особой-ситуации ) составной-оператор описание-особой-ситуации: список-спецификаций-типа описатель список-спецификаций-типа абстрактный-описатель список-спецификаций-типа … выражение-запуска: throw выражение opt спецификация-особой-ситуации: throw ( список-типа opt ) список-типа: имя-типа список-типа , имя-типа |
|
||
Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх |
||||
|