Пожалуйста, уточните, если у кого-то есть знания о Vera ++ или статическом анализаторе.
Как реализовать машину проверки сложных правил C ++ в качестве статического анализатора? Я хочу реализовать сложные правила, такие как виртуальная функция, в базовых классах, идентификация пользовательских переменных, таких как классы, структуры и т. Д. Область видимости переменных, таких как глобальные, локальные, статические и т. Д. Я очень хорошо понимал Vera ++, насколько я понимаю, он выполняет только синтаксический анализ токенов, Контекст языка должен быть реализован с помощью сценариев (и реализованный контекст может быть слишком сложным, если язык похож на C ++); потому что различие между а * б; (который может быть указателем b типа класса a) ИЛИ a * b; (может быть просто умножением двух на переменные);
Я даже чувствую, что для реализации сложных правил может потребоваться некоторый компилятор, такой как State Machines, чтобы скрипты могли понимать контекст языка.
Мой вопрос просто задать:
Правильно ли мое понимание с точки зрения реализации правил статического анализатора.
Можете ли вы, пожалуйста, направьте меня немного, как я могу приступить к выполнению этой задачи.
Могут ли эти задачи быть упрощены с помощью REGEXP tcl.
Есть ли какой-то конкретный подход к проектированию, который вы можете предложить для хорошей реализации Solid C ++ Code Analyzer.
Я бы предложил вместо этого использовать полноценный парсер с ++.
лязг это набор библиотек, которые полностью понимают C ++, потому что именно те библиотеки, которые вы можете использовать для своего анализа, являются теми, которые используются компилятором (поговорим о собачьих подвигах). Вы можете получить доступ к нескольким «слоям»: Абстрактное синтаксическое дерево, График потока управления. И уже существует платформа статического анализатора, для которой вы можете реализовать проходы.
Наконец, и, пожалуй, самое интересное, вы можете взаимодействовать с C ++ OR C, и есть даже привязки Python (хотя и явно неполные) поверх интерфейса C.
Честно говоря, учитывая чудовищную сложность грамматики C ++, в настоящее время мазохисту нужно использовать что-либо, кроме настоящего семантического парсера.
Другие парсеры (любезно предоставлены Ира Бакстер) включают:
Других решений пока нет …