Нет.C + + слишком сложно анализировать для большинства автоматических инструментов, и на практике обычно анализируется рукописными синтаксическими анализаторами. [Редактировать 1 марта 2015: добавлены «большинство» и «обычно».]
Среди трудных проблем:
A * B;
, которые могутлибо определение переменной B с типом A*
, либо просто умножение двух переменных A и B. A < B > C > D
Где заканчивается шаблон A<>
?Обычные правила 'max-munch' для разбора выражений здесь не сработают. vector<shared_ptr<int>>
, где >>
заканчивается двумя шаблонами, что трудно сделать только с одним токеном (а пробел между нимипозволил).Но в 1>>15
пробел не допускается.
И держу пари, что этот список далек от завершения.
Добавление : грамматика доступна, ноявляется неоднозначным и, следовательно, недействительным в качестве входных данных для таких инструментов, как Spirit.
Обновление 1 марта 2015 г. : Как отмечает в своих комментариях Ира Бакстер, известный специалист в этой области,Есть некоторые генераторы парсеров, которые могут генерировать парсер, который будет генерировать полный лес синтаксического анализатора.Насколько я знаю, выбор правильного разбора все еще требует семантической фазы.Я не знаю ни одного некоммерческого генератора синтаксических анализаторов, который может сделать это для грамматики C ++.Для получения дополнительной информации см. этот ответ .