1

我目前正在为旧的 VBA(应用程序的 Visual Basic)应用程序提供服务。我有一个遗留工具,可以分析该应用程序并打印出死变量。由于其中有 2000 多个,我不想手动执行此操作。

因此,我有了根据上述工具将包含死变量的单独代码文件转换为 AST 并以这种方式删除它们的想法。

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

请问有人有什么推荐吗?

4

1 回答 1

0

一些理论

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

算法

可以建议以下算法:

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

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

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

于 2011-05-20T01:41:25.797 回答