C ++ парсеры сложны для сборки.
Я не могу говорить с опытом о , используя ANTLR C ++ грамматики. Здесь я обсуждаю , что я узнал, прочитав заметки, прикрепленные к той, которую я видел на сайте ANTLR; по сути, автор создал неполную грамматику. И это было только для C ++ 98. Прошло некоторое время с тех пор, как я посмотрел; могут быть и другие.
Наш инструментарий реинжиниринга программного обеспечения DMS имеет надежный интерфейс C ++ .
Лексер обрабатывает все, что нужно для ANSI, GCC3, MS Visual Studio 2008, включая большие числа с плавающей запятой и т. Д.
[ПРАВКА: 12/2011. Теперь обрабатывает директивы C ++ 11 и OpenMP]
[ПРАВКА: 3/2015: теперь обрабатывает C ++ 14 в GCC и MS вариантах.
См. Некоторые деревья разбора здесь на SO ]
Наличие "просто" парсера на самом деле не очень полезно. Помимо «простого синтаксического анализа», наш внешний интерфейс будет создавать AST, создавать точные таблицы символов (для C ++ это чрезвычайно сложно сделать), выполнять анализ потока функции на локальном уровне и позволять выполнять преобразования программы и т. Д. См. Жизнь после разбора .
[РЕДАКТИРОВАТЬ: 5/2019: Теперь обрабатывает C ++ 17 в вариантах ANSI, GCC и MS. Выполняет полное разрешение имени и типа в единицах компиляции. Используется для автоматизации крупномасштабного рефакторинга / разделения * по классу Бога * в системах из 3000 единиц компиляции.]