Реализация правил Vera++

Пожалуйста, пройдите, если кто-то знает о Vera++ или Static Analyzer.

Как реализовать сложную машину проверки правил C++ в качестве статического анализатора? Я хочу реализовать сложные правила, такие как виртуальная функция в базовых классах, идентификация определяемых пользователем переменных, таких как классы, структуры и т. д. Область переменных, такая как глобальная, локальная, статическая и т. д. Я очень хорошо понял Vera ++, согласно моему пониманию, он выполняет только анализ токенов, Контекст языка должен быть реализован через сценарии (а реализованный контекст может быть слишком сложным, если язык похож на C++); поскольку различие между a *b; (который может быть указателем b типа класса a) ИЛИ a *b;(может быть просто умножением двух переменных);

Я даже чувствую, что для реализации сложных правил может потребоваться какой-то компилятор, такой как State Machines, чтобы скрипты могли понимать контекст языка.

Мой вопрос просто спросить:

  1. Правильно ли я понимаю реализацию правил статического анализатора.

  2. Не могли бы вы немного помочь мне, как я могу приступить к выполнению этой задачи.

  3. Можно ли упростить эту задачу с помощью REGEXP tcl.

  4. Есть ли какой-либо конкретный подход к проектированию, который вы можете предложить для хорошей реализации Solid C++ Code Analyzer.


person Vikrant Ghai    schedule 21.11.2012    source источник
comment
Возможно, это поможет: stackoverflow.com/questions/13139556/   -  person πάντα ῥεῖ    schedule 21.11.2012
comment
Вы можете собрать некоторую эвристическую информацию о C++ на уровне токенов (что предлагает Вера), но любой серьезный семантический анализ требует реального синтаксического анализа и построения таблицы символов. Иначе как бы вы узнали что-то такое простое, как X*Y; означает? См. stackoverflow.com/questions/243383/   -  person Ira Baxter    schedule 21.11.2012


Ответы (1)


Вместо этого я бы предложил использовать полноценный синтаксический анализатор С++.

Clang — это набор библиотек, которые полностью понимают C++, потому что те самые библиотеки, которые вы можете использовать для анализа, используется компилятором (поговорим о кормлении собак). Вы можете получить доступ к нескольким «слоям»: абстрактному синтаксическому дереву, графу потока управления. И уже есть фреймворк статического анализатора, для которого вы можете реализовать проходы.

Наконец, и, пожалуй, самое интересное, вы можете взаимодействовать с C++ ИЛИ C, и есть даже привязки Python (хотя и явно неполные) поверх интерфейса C.

Честно говоря, учитывая богоподобную сложность грамматики C++, в наши дни потребуется мазохист, чтобы использовать что-либо, кроме настоящего семантического синтаксического анализатора.

Другие синтаксические анализаторы (любезно предоставленные Ирой Бакстер) включают:

  • Эльза (открытый код)
  • DMS (коммерческий)
  • EDG (коммерческий интерфейс C++, используемый для реализации компиляторов)
person Matthieu M.    schedule 21.11.2012
comment
Согласованный. Также есть Elsa (с открытым исходным кодом), DMS и EDG (коммерческая). - person Ira Baxter; 21.11.2012
comment
@IraBaxter: А, спасибо! Я не мог вспомнить ваше имя по памяти, но я знал, что у вас будут альтернативы. Я отредактирую их. - person Matthieu M.; 21.11.2012