对于这种情况,通常情况下,可能没有现成的答案;人们的代码库中总是有许多惊喜,而这种组合使 COT 工具在个别情况下变得不经济。
您需要的是一个程序转换系统(PTS),它带有 C 前端,可以定制以解析嵌入式 SQL。这样的工具可以应用源到源重写规则(“如果你看到这个模式,然后用那个模式替换它”)来解决问题。
这些工具需要一些技术上的努力来配置。在您的情况下,您必须调整 C 前端来处理嵌入式 SQL;这通常不在 C 解析器中。(如何以当前形式处理这些东西?)C 预处理器会有问题,因为人们用它做滥用的事情,这确实违反了解析器对宇宙的嵌套结构视图。然后你必须编写和测试规则。
这种努力是一种沉没成本,可以与手工完成工作的努力或一些更多的临时脚本(例如,Perl)进行交易,后者部分完成工作,让您清理它。我们的经验是,低于 100K SLOC 的麻烦是不值得的,并且您没有机会手动/临时修复高于 1M SLOC,并且您的里程会有所不同。
在这些中等大小的情况下,您可以为权衡取舍而苦恼;这也需要精力和时间。有时它只是更好地咬紧牙关,做任何你可以清理它的方式。
我们的 DMS 软件再造工具包就是这些 PTS 之一。它有一个可定制的 C 解析器和预处理器,正是为了帮助处理这些配置问题。我相信,维基百科文章中提到的其他 PTS 没有任何与它们相关的严重 C 解析器。(我是 DMS 背后的人)。