精细切片与顺序 Erlang 中的系统依赖图
精细切片
在程序分析与转换中,精细切片是一项重要技术。对于提取计算算法而言,若给定一个子程序和一组预期结果,其操作步骤如下:
1. 提取子程序 :将子程序提取为一个单独的过程。
2. 确定参数和创建序列 :识别参数并在必要时创建序列。
3. 替换原代码 :用余切片和对提取过程的调用替换原始代码。
在余切片中选择调用提取代码的位置时,需要确定余切片中的一个控制边,该边由其源节点 c 唯一定义,c 必须满足以下条件:
- c 与 Qmax 包含在完全相同的控制循环中。
- c 必须由提取代码的所有参数源所支配。
- 从 c 到任何添加的入队操作的每条路径都必须经过 Qmin。
- c 支配余切片中包含任何断开连接的输入数据端口的每个节点。
提取计算转换在所有潜在数据流都由数据依赖关系表示的假设下是正确的。对于像 Cobol 这样的语言,这相对容易实现,但在存在别名和共享的情况下,如 Java,可能并非如此。
实现
提取计算和精细切片算法基于计划切片器实现,具有语言独立性,可用于 Eclipse 中的 Cobol 和 Java 转换。对于提取计算,实现使用了 Eclipse 高亮机制的扩展,允许选择非连续的文本块。未标记的变量或表达式表示要断开连接的输入,同时会断开标记代码对未标记代码的所有控制依赖。语义恢复会根据需要添加控制结构以保持提取代码的语义。
精细切片还有其他应用,例如克隆检测器识别相似
超级会员免费看
订阅专栏 解锁全文
1476

被折叠的 条评论
为什么被折叠?



