使用antlr删除死代码

时间:2010-09-13 17:23:45

标签: antlr access-vba antlr3

我目前正在为旧的VBA(应用程序的visual basic)应用程序提供服务。我有一个遗留工具分析该应用程序并打印出死变量。由于其中有2000多个,我不想手工完成。

因此我有想法将根据上述工具包含死变量的单独代码文件转换为AST并将其删除。

我的问题:有推荐的方法吗? 我不想使用StringTemplate,因为我需要为所有规则创建模板,如果我对隐藏的通道有一个推荐,它就会丢失,对吧? 我需要的一切就是删除部分代码并打印出其余部分。

任何人都有任何建议吗?

1 个答案:

答案 0 :(得分:0)

一些理论

我认为正则表达式不足以解决您的任务。也就是说,你无法用任何常规语言定义死代码部分的概念,并希望用一些antlr语法描述的无上下文语言来表达它。

算法

可以建议以下算法:

  1. 使用词法分析器标记源代码。 由于您希望保留所有正确的代码 - 请勿跳过或隐藏它的令牌。确保为可能被删除的部分定义单独的标记,或者用于确定死代码的部分,所有其他字符可以在单个标记类型下收集。在这里,您可以在谓词中使用辅助工具的输出来减少生成的令牌数量。我想antlr的标记化(就像任何其他标记化一样)是用常规语言表达的,所以你不能删除这一步中的所有死代码。

  2. 使用解析器构建AST。 这里可以应用无上下文语言的所有功能 - 在解析器规则中定义死代码部分,并将其从正在构造的AST中删除。

  3. 将AST转换为源代码。您可以在这里使用一些树解析器,但我想有一种更简单的方法可以找到观察toString和类似的方法解析器返回的树类型。