我正在编写一个嵌入式脚本语言的编译器,它将在我的应用程序中运行。我目前正在研究编译器的语义分析部分。理论上,我想知道如何检查给定脚本中的所有代码路径是否都返回一个值。做Google search只会产生关于人们在自己的代码中看到错误的结果,而不是所有的代码路径都返回一个值(主要是SO问题),所以我无法找到解释如何进行实际检查的来源。有人能指出我正确的方向吗?
注意: 我特意寻找一个权威的来源,概述一个严格的算法,如果可能的话。
答案 0 :(得分:6)
你可以通过AST的递归遍历来做到这一点。例如:
如果第一个语句在所有控制路径上返回,或者第二个语句在所有控制路径上返回,则所有控制路径上都会返回一系列语句。
如果“if”和“else”分支都返回所有控制路径或“if”语句始终为true,则if语句将在所有控制路径上返回。
只有当“while”条件始终为真时,while循环才会在所有控制路径上返回。
返回语句在所有控制路径上返回。
希望这有帮助!