Существует ли стандартная грамматика 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