Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 200
Текст из файла (страница 200)
Предметный указатель весьма обширен и является неотьемлемой частью данной книги. А. Грамматика ......... Б. Совместимость ..... 891 В. Технические подробности ....... 903 Г. Локализация 947 ...... 1 0 1 7 Предметный указатель ..... 1055 Д. Безопасность исключений и стандартная библиотека Приложение А Грамматика Для учителя нет балтией опасности, нелл учить словим, а не вещам. — Марк Блок Введение — ключевые слова — лексические соглашения — программы— выражения — инструкции — объявления — объявители-классы производные классы — особые функции-члены — перегрузка — шаблоны— обработка исключений — директивы препроцессора.
А.1. Введение Приведенное ниже описание синтаксиса С++ должно помочь пониманию языка. Оно не является точным определением языка С.н-. В частности, описанная здесь грамматика допускает надмножество допустимых конструкций С.н-. Чтобы отличать выражения от объявлений, нужно применять правила устранения неоднозначностей Я А.5, 9 А.7). Кроме того, дпя «прополки» синтаксически правильных, но бсссмьюленных конструкций нужно использовать правила контроля доступа, разрешения неоднозначности и типов.
Стандартные грамматики С и С++ выражают самые малейшие различия синтаксически, а не через ограничения, Это способствует точности, но не всегда улучгпает читаемость. А.2. Ключевые слова Новые зависящие от контекста ключевые слова вводятся в программу прп помощи обьявлений 1урег7е~Я 4.9.9), пространств нмсн Я 8.2), классов (глава 10), перечислений Я 4.8) и шаблонов бетр1аГе (глава 13).
илсчыуредеб идентификатор илья - пространства- иие ил оригинальное-льчя-пространслпва-имен псевдоним-прослпранства-ил~ен оригинальное-ют-пространства-имен; идентификатор псевдонилепросплранслпва-ил~ен: иденилифллкатор илт-класса: иденлпификатор идентификатор-илаблона Приложение А. Грамматика 872 илш-пере«исленшчг идентификатор иггя-гиадлонас идентификатор Отметим, что название класса через имя-гуреае1 — это тоже имя-класса. Если идентификатор явно не объявлен, как обозначающий имя типа, считается, что он обозначает нечто, не являющееся типом 1см.
~ В.13.5). Ключевые слова С++ таковы: Ключевые слова С++ А.З. Лексические соглашения Стандартные грамматики С и С++ прсдставлянзт лексические соглашения как грамма- тические продукции. Это повышает точность, но приводит к более громоздким грамма- тикам и не всегда улучшает читаемостге шестнадцатеричная-четеерка: шестнадцатеричная-цифра шесгпнадцатеричная-цифра шестнадцитеричная-цифра шестнадцатеричная-цифра' универсальное-символьное-иля; ~чи шестнадцшперичная-четеерка ф шестнадцатеричная-четеерка шестнадцатеричная-четеерка токен-препрацессиравания: иля-заеоловочного-файла идентификатор рр- шсло символьный-литерал строковый-литерал оперитор-препроцессирования-или-знак-прегшнания всякий силгеол-не разделитель, не огпносягиийся к указанным выше К сожалению, ограниченная ширина страницы книги не позволяет уместить некоторые грамматические конструкции С«+ в одной строке.
В таких случаях они переносятся на новую строку с дополнительным отступом слева. — Примеч. ред. апг1 аис1 ед аяи аи1о Ыгапаг Ьггог Ьоо1 ЬгеаЬ сазе са1сЬ сЬаг с1авв сотр1 сопз1 сопз1 саз1 сои 11пие г1е~аи11 г1е1е1е с1о с1оиЫе г1упаиис санг е1зе еиит ехр11с11 ехрогг ех1егп 1а1зе Яоа1 1ог /пепг1 дога Ц' 1и11не Ы1 1опд тигаЫе иатезрасе иеш ио1 ио1 ед орега1ог от ог ед рпоа1е рго1ес1ег1 риЫ!с геу1згег тет1етрте1 саз1 ге1игп зЬогг иди ес1 яяео1' з1а11с з1а11с саз1 зггис1 зиг11сЬ 1етр1аге 1Ыз 1Ьтош 1гие 1гу 1урегуе1 1уреЫ 1урепа те итоп ипядиеа ияпу о1гвза1 ооЫ оо1а111е шсЬаг 1 шЫ1е хог хог ед 873 А.З.
Лексические соглашения токенг идентификатор ключевое-слово литерал оператор знак-препинания илт-заголовочного-файла: <Ь-сшгыольная-последовательность 'у- сггг свальная- последовательность' Ь-аогвольная-последовапгельностк 6-силгвол !г-спмвольная-ггоследовагпельность !г-сильвах Ь-символ: любой элемент исходного набора символов кроме перевода-строки сс > у-сгигвольная-последовательность; д-силгвол д-счглгвольная-последовательность д-символ у- символ г любой злелгент исходного набора символов кроме-перевода строки и иденпиефикатор не-цифра идентификатор не-цифра идентификогпор цифра гппорс!ге гиччгхух !.
М (Ц О Р С! 8 5 Т 0 Ч УУ Х У 7 цифра: одно пз О! 23456789 опера спор-препроцессирования-или-знак-препинанияг одно из ь > о, .ь %= Ы1апс( «= »= « » с(е(есе по! ес! а ос! — > сагир! печч по! ог Ыгог хог хог ес! рр-число: цифра . циф,за рр-число цифра рр-число не-цифра рр-число е знак рр- гисло Е знак Рр- июли не-цифраг адно из универсальное-си>свальное-илгя аЬсс(е(9(г!!( АВСОЕ ЕОН ! й К > <% / / ЪЪ апд ес! ог ес! 874 Прнножение А. Грамматика литерал; целый-литерпл сш~вольный-ллпперал литерал-с-плаваюп!ей-точкой гтроковьш-литерал л оги ческий-ли ил врал цельш-литерал: десятичный-литерал целый-суффикс», восьл~еричный-лип героя ц елыич су4фикс„н шестнпдцотеричный-липырпл целый-суффикс л, десятичньш"-литерал: ненулевая-цифра десятичный-лптералци4ра вогьл~ерпчньлй-лшперолг 0 восьмеричный-лшперал восьл~ергшная-цифра ~иеспгнадг!агперичный-липерал: Ох шестнадцагперичная-цифра ОХ ~иесплнадцатери гноя-цифра шеспгнадцатеричный-литерал шеслпнадцатерачная-цифра ненулевия-цифра: одно из ! 23456789 восьл~ерпчная-цифра: одно из О ! 234567 ли ест надца теро чная-цпфрси одно из О ! 23456789 О Ь с с! е АВСГ!Е Г целочисленньш-су44пкс.
беззнаковый-суффикс длинный-суффикс«» длинный-суффикс беззиаковый-суффикс„„, беззнаковьш-суффикс: одно из длинньш'-суф4икг: одно из сгьивольныгнлиггге!лали 'с-символьния- погледовательность' Ос-спмвольнпя-последовагпельность' с-ели~вольная-последоваплелвностьо с-сил~вол с-сил1 вол иная-посл едовагпельность с-сшивал с сил~вол: любой элемент исходного набора символов кроме апострофа !"), обратной косой черты !~) и перевода строки ' Здесь и далее „, означает «орь!г»на!», то есть «необязательно».
— Приллеч. ред. 875 А.З. Лексические соглашения езсаре-последоватальношпь универсашное-символьное-имя езсаре-последовательность> прогтая-взваре-последовательность восьмеричная-езсаре-последовательность шее>пнадцап>ер>>чная-езсаре-последовательность прас>пая-езсаре-ткледовательностсс одно из У ~~ 'ча ~Ь У восьмеричная-елсаре-последовательностле ~ восьл>еричная-цяфра '>, восьл>ерлшная-цифра восьмеричная-цифра >, васил>ер>шиая-цифра вась>>еричная-цифра восьл>еричная-цифра »лестнадцатер»чная-езгаре-последовательность: Чх шестнадцатеричная-ц>>фри шестнадцатсричнач-есюаре-последовательность >исси>надца>перинная цифра литерал-с-плаваклцей->почкой> дробная-консгпана>а показа>пель,, плаваю>ций>-ср>фф>лкс,„> цифровия-последовательносп>ь показатель плаваямцнй-суффикс,,л, дрооная-константа> цифровая -последовательность„„, .
цифровая-последовал>ельность цифровая-последова>пельность показате гь: е знаки цифровая -последовательность Е знак„„цифровая-последовательность знак: одно из + цифровая-погледовательностле цифра цифровая-последовательность цифра плаваю>ций-суффикс: одно из Е 3 Г строковый-литерал: з-символьная-последовательность„„,.' Г з-силпольная-последовательность„п з-символьная-последова>пельност>а 5 ПО>вол з-символьная-последовательноппь з-сил>вол 5-сил>вол; л>обой злел>ент исходного набора силяволг>в кроме два»нь>х кавычек ~'7, обратной косой черты >' ~) и перевода строки езсаре-последовательность универсальное-с»л>вольное-лиля логическ>ли-лшперал: Фс!зе Мгие Приложение А. Грамматика 876 А.4.
Программы Программа — это набор единиц-трансляции, комбнннруемык посредством компоновки [6 9А), Единица-трансляции, которую часто называют исходным файлом, — это последовательность обьявяений; единица-трансляции: последовательность-объявлений А.5. Выражения Выражения описываются в главе 6 н в обобщенном виде в з 6.2. Определение спискавьсражений ндентнчно определению выражения. Существуют два правила для отлнчня запятой в качестве разделителя в спнскс аргументов функции и оператора запятая (последовательность,6 6.2.2).
первичное-выражение: литерал 11115 :: идентификатор ': идентификатор-оператора-функции .. квалифицированный-иденти4икатор [ выражение ] идентификатор-выражение идентификатор-выражение: неквсииифа царевавныйагдентифика тор квситфпцированный-идентификатор неквалифицированный-идентификатор; иден(пификйп1ор иденти4икшпор-функь1ии-оператора и денгпи4и катар-функции -преобразования ; иня-класса идентификатораиаблона квалифицированный-идентификатор: спецификатор-вложенного-ил~ени 1еспр]а1е„„, неквал и4ицированиый иденти4и катар специ4икатор-вложенного-имени: шия-класса — ~ти-пространсгпва-ивен и спецификатор алогкепноео-имени.р, ил~я-класса-или-пространства-имен и 1етр]а1е спецификатор-влоясенногопииени имя- класса- или- пространства нивен: ил|я-класса имя -п растра нства -имен пост4аксное-выражение: первичное-выражение постфиксиое-выражение [ вьсражение ] иосгпфиксное-выражение [ список-выраженш1„„,] специфика тор-простого-типа [ список-выражений„г, ] 1урепоте ".„„, спецификатор-вложенного-ильени идентификатор [ список-выражений„г, ] А.5.
Выражения 1урепагпе и„„, специфика тор-вложенного-имени гетр(огемлллденгпггфикатор-шаблона (список-выражений„м ) постфиксное-выражение. гегпр)агеил.".,е, идентггфикатор-вьлраженгге постфиксное-выразкение — 1егпр)оге „:.„„, идентификагпор-выражение постфикснос-выражение. имя-псевдодеструкгпора постфиксное-выралсение- имя-псевдодеструкпгора постфиксное-выражение+е постфиксное-выражение— с)упагп1с саз) < идентификагпор-типа >(вырпжение) з)айс саз) < идентификатор-типа > (выражение) ге)п1егрге1 созг < идентификатор-типа > ( вьлражение ) сопя) саз1 < идентификаплор-гнила > ( выражение ) луре<с) ( выражение) )урез ( идентификатор-типа ) список-выражений: выра мление- прг гав а и в сгнил список-выражений, выражение-присваивания имя-псевдодегтрукгпора г с„„спецификптор-вложенного-аллен ~в„и<ля-тсгпа г - имя-типа : „„, специфика тор-вложенного-имени 1егп р)оге 1егпр(аде идентификатор-шаблона ".
— гглгя-тггпа .:„,, спецификатор-вложенного-илгение, — илгя-гнила упорное-выражение: посгпфиксное-вьлражение +ь выра>кение-приввденгш — выражение-приведения унарный-оператор выражение-приведения з|гео( унарное-выражение з)гео(( идентификатор-типо ) пепл-вырамсение деле)е-выраженгге унарный-оператор: одно из ь пеш-выражение: и„„пеш новое-размещение„„, идентификатор-нового-типа новый-иницпализатор„„ ::„„, пеш новое-размещвниеоы( идентафикотор- вито ) новьгй-цнициолизагпор новое-размещение: (список-выражений) ллденпгифггкалглор-нового-типа: последовательносгпь-спецификаторов-типа новый-объявитель„„, новый-обьявителгм ргг-оператор новый-объявитель, непосредственно-новьш"-объявитель непосредшпвенно-новьш)-объявителш [ выражение ] непосредственно-новый-объявитель [ констангпное-выражение ] новьлй-инициализатор: ( список-выражений„, ) Приложение А. Грамматика 878 дегеге-выражение : ч„4е~а1е выражение-приведения ".„„, с1е!е1е ( ~ вьгражение-приведения вьгражение-приведенияг унорное-вьгражение ~ ггденгггггфггкатор-ггггггга ) выражение-приведения рт-выражениег выражение-приведеная рт-выражение "выражение-привеоения рт-выражение — >' вырпжение-приведения мульптплнкативное-выражениег рт - выра жение мулыпиплггкагггивное-выражение* рт-вырпжение мулыпппликапшвное-выражение гг рт-выражение мул ып иплика та в кое-выражение '4 ргп-выражение аддипгивное-выражение: лгультипликативное-выражение адди главное-в ырпясенив + лгульпгипли кати в нос-выражение аддигпивног-выраженпе — лгультипликативное-выражение выражение-сдвига: аддитивное-выражение выражение-сдвига «аддитивное-выражение выражение-сдвига» аддитивное-выражение выражение-отношгния: выражение-сдвига выражение-отношенпя выражение-отногиения выражение-отногиения выраясение-опгношения < выражение-сдвига > выражение-сдвига <= выражение-сдвига >= выражение-сдвггга вырагкение-равеншпва выражение-отношения выражение-равенствп == выражение-отношения выраженгге-равенства!= выражение-отногиенгн выражение-Иг выражение- ривенстви выражение-И с' вьгражение-равенсгпва выраженггв-паклю«аюгггего-ИЛИ: выражение-И выражение-исключающего-ИЛИ" выражение-И выражение-вклкгггаюгцего-ИЛИг выражение-исключающего-ИЛИ вьгражение -включающего-ИЛИ ( вьгралс ение- исключающего- ИЛИ выражение-логического-И: вырин<ение-вклюггаюгуего-ИЛИ выра жение-логического-И ЙЙ выражение-включающего-ИЛИ вьгражение-логического-ИЛИг выраженпе-логического-И выражение-логического-ИЛИ ~~ выражение-логгщеского-И 879 А.б.