Существует ли стандартная грамматика C++?

Стандарт определяет официальную грамматику C++?

Я искал, но нигде не нашел.

Кроме того, я хотел бы прочитать немного о грамматике C++ подробно, например, к какой категории грамматик она относится и т. Д. Любые ссылки, указывающие мне правильное направление, были бы полезны.

Под категорией я имею в виду

нажмите, чтобы увеличить взяты отсюда.

5 ответов

Решение

Да, это так.

Грамматика подробно описана во всем стандарте и суммирована в Приложении A: Краткое изложение грамматики (это Приложение A как в стандарте C++03, так и в окончательном проекте комитета C++0x).

Вы можете приобрести стандарт C++03 или загрузить FCD C++0x (это документ n3092 на этой странице).

Чтобы ответить на вопрос "в какой категории это?" вопрос, грамматика C++ не является контекстно-свободной (см. также вопросы, связанные в ответах на этот вопрос; у них есть дополнительные примеры проблем, связанных с грамматикой C++ и синтаксическим анализом C++).

Алессио Маркетти разместил гиперссылочную грамматику BNF для C++ на http://www.nongnu.org/hcb/.

Наличие всего связанного вместе и на одной странице позволяет легко перемещаться между правилами.

Эндрю Биркетт имеет подробный обзор синтаксического анализа C++ на своем веб-сайте. Он охватывает некоторые трудности при создании грамматики C++ (смешивание лексического, синтаксического и семантического анализа) и включает ссылки на несколько грамматик C++.

Бьярн Страуструп, создатель C++, написал книгу "Язык программирования C++", которая много раз обновлялась (я читал 3-е издание около 10 лет назад). Напомню, в нем были очень технические детали, касающиеся грамматики (препроцессор и компилятор).

Вы, вероятно, можете найти эту книгу в одном из местных книжных магазинов, она может предложить вам больше удовольствия, чем стандартный документ ANSI, в зависимости от того, насколько конкретным вам нужно быть.

Не уверен, но, насколько я вижу, ссылка Джеймса Макнеллиса (на PDF) содержит примечание на первой странице:

Предупреждение

Этот документ не является международным стандартом ISO. Он распространяется для просмотра и комментирования. Он может быть изменен без уведомления и не может называться международным стандартом.

Итак, искал, и я думаю, что это правильная ссылка на официальный ISO: http://www-d0.fnal.gov/~dladams/cxx_standard.pdf

Другие вопросы по тегам