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