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

Пожалуйста, уточните, если у кого-то есть знания о Vera ++ или статическом анализаторе.

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

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

Мой вопрос просто задать:

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

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

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

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

1

Решение

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

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

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

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

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

  • Эльза (Открытый исходный код)
  • DMS (Коммерческий)
  • EDG (коммерческий, C ++ front-end используется для реализации компиляторов)
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]