Чтобы получить разумный ответ, вам нужно более тщательно оценить проблему.
Например, что вы собираетесь делать с методами, содержащими директивы препроцессора?
void M()
{
#if FOO
for(foo;bar;blah) {
#else
while(abc) {
#endif
Blah();
}
}
Это глупо, но законно, так что вы должны с этим справиться. Собираетесь ли вы считать это несоответствующей скобкой или нет?
Можете ли вы предоставить подробную спецификацию именно того, что вы хотите определить? Как мы уже видели несколько раз на этом сайте, люди не могут успешно создать процедуру, которая делит два числа без спецификации. Вы говорите об анализе, который намного сложнее, чем деление двух чисел; код, который выполняет то, что вы описываете в реальном компиляторе, имеет длину в десятки тысяч строк.