如何检查所有代码路径是否返回值

时间:2014-02-21 21:50:08

标签: compiler-construction semantics

我正在编写一个嵌入式脚本语言的编译器,它将在我的应用程序中运行。我目前正在研究编译器的语义分析部分。理论上,我想知道如何检查给定脚本中的所有代码路径是否都返回一个值。做Google search只会产生关于人们在自己的代码中看到错误的结果,而不是所有的代码路径都返回一个值(主要是SO问题),所以我无法找到解释如何进行实际检查的来源。有人能指出我正确的方向吗?

注意: 我特意寻找一个权威的来源,概述一个严格的算法,如果可能的话。

1 个答案:

答案 0 :(得分:6)

你可以通过AST的递归遍历来做到这一点。例如:

  • 如果第一个语句在所有控制路径上返回,或者第二个语句在所有控制路径上返回,则所有控制路径上都会返回一系列语句。

  • 如果“if”和“else”分支都返回所有控制路径或“if”语句始终为true,则if语句将在所有控制路径上返回。

  • 只有当“while”条件始终为真时,while循环才会在所有控制路径上返回。

  • 返回语句在所有控制路径上返回。

希望这有帮助!