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