Какие хорошие инструменты для быстрого запуска анализа и анализа кода на C/C++?Хорошие инструменты для создания анализатора/анализатора C/C++
В частности, я ищу инструменты с открытым исходным кодом, которые обрабатывают препроцессор и язык C/C++. Предпочтительно, эти инструменты будут использовать lex/yacc (или flex/bison) для грамматики, а не быть слишком сложными. Они должны обрабатывать последние определения ANSI C/C++.
Вот что я нашел до сих пор, но не смотрел на них подробно (мысли):
- CScope - Старая школа анализатор C. Тем не менее, похоже, что он не выполняет полный анализ. Описан как прославленный «grep» для нахождения функций C.
- GCC - Все любимые компиляторы с открытым исходным кодом. Очень сложно, но, похоже, все это. Существует связанный с этим проект для создания расширений GCC под названием GEM, но не обновлен с GCC 4.1 (2006).
- PUMA - PUre MAnipulator. (со страницы: «Цель этого проекта - - предоставить библиотеку классов для анализа и управления источниками C/C++. Для этого цель PUMA предоставляет классы для сканирования, анализа и, конечно же, управления C/C++ источников ".). Это выглядит многообещающим, но не обновлялось с 2001 года. По-видимому, PUMA была включена в AspectC++, но даже этот проект не обновлялся с 2006 года.
- Различные грамматики C/C++. Вы можете получить c-c++-grammars-1.2.tar.gz, но это было поддержано с 1997 года. Небольшой поиск в Google подтягивает другие базовые грамматики lex/yacc, которые могут служить отправной точкой.
- Любые другие?
Я надеюсь использовать это как отправную точку для перевода источника C/C++ в новый язык игрушек.
Спасибо! -Matt
(Добавлено 2/9): Просто пояснение: Я хочу извлечь семантическую информацию из препроцессора в дополнение к самому C/C++-коду. Я не хочу, чтобы «#define foo 42» исчезал в целое число «42», но оставался прикрепленным к имени «foo». Это, к сожалению, исключает несколько решений, которые сначала запускают препроцессор, и только доставляют дерево разбора C/C++)
Мэтт, я думаю, что это скорее назойливая надежда; препроцессор по определению работает над источником, прежде чем он попадает в анализ. По крайней мере, старые компиляторы трубопроводов имели предварительный источник в трубе перед разбором. по первому пропуску. Может быть, вы могли бы использовать встроенные комментарии cpp? –
Вы можете запустить собственный процессор на источнике. Он выведет аннотированный источник. Вам нужно будет изменить грамматику C++, которую ваш инструмент будет использовать для чтения в этих аннотациях. Привет, C++, вы знаете, что это не будет легко :) –
Просмотрено 42 000 раз? Я думаю, что это нужно снова открыть. Если вы, прочитайте, согласитесь, затем нажмите «повторно открыть» выше. –