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

MrC*_*nky 9 compiler-construction semantics

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

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

tem*_*def 6

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

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

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

  • 仅当"while"条件始终为true时,while循环才会在所有控制路径上返回.

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

希望这可以帮助!