Есть ли универсальный пух (-toolkit)? - PullRequest
4 голосов
/ 04 октября 2010

Я хочу провести статический анализ кода для нескольких сценариев, написанных на не очень распространенном языке программирования (например, синтаксис C). Частые проблемы:

  • использование не определенных / объявленных символов
  • неверный номер или тип аргументов при вызове функции

Сам интерпретатор / компилятор языка не помогает при этих проблемах.

Существует ли какой-нибудь ворсистый инструмент, достаточно гибкий, чтобы легко адаптировать его к новым языкам программирования? Или кто-то знает другую хорошую отправную точку? (Lex / Yacc ???)

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 05 октября 2010

Имеющийся в продаже DMS Software Reengineering Toolkit позволяет создавать такие проверки согласованности и достаточно гибок, чтобы адаптироваться ко многим языкам.

2 голосов
/ 04 октября 2010

Я сомневаюсь, что вы найдете универсальный инструмент.

Большая часть статического анализа зависит не только от лексического и грамматического соответствия.

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

Например, в C этот код if ( x = 3 ) { /*Do something*/ } является совершенно законным, хотя программист мог иметь в виду ==. Или можно сделать printf("%s", longVal);, и хотя произвольные значения могут быть помещены в стек, этот конкретный вызов может иметь другие ожидания в зависимости от переданных ему начальных значений.

Суть в том, что универсальному приложению lint было бы так много знать, не говоря уже о том, что языки и библиотеки являются движущейся целью, что если бы такой зверь существовал, он был бы слишком сложным или слишком недостаточно для практического применения, чем более дешевый инструмент, который лучше справлялся с работой на конкретном языке.

0 голосов
/ 08 ноября 2012

Проведя несколько часов, играя с PHP_CodeSniffer и некоторыми другими, предложившими в другой поток здесь ... Я пришел к выводу, что PHPlint - путь для меня Если по какой-либо другой причине он может правильно определить код, который вызывает функцию с неправильным числом аргументов.

0 голосов
/ 01 марта 2011

Рассмотрим Vera Community Edition или Google cpplint с кодом, который вы можете настроить.

...