我试图弄清楚如何将命令性代码转换为A-normal形式。我可以看到如何对许多结构进行操作。例如,do ... while
循环可能会转换为
letrec
loop() =
body
let t = test
if t then loop() else ()
loop()
体内的continue
将转换为对loop()
的立即尾部递归调用。 break
将转换为循环后对下一段代码的尾部递归调用。
但是return
语句转换成什么?我并不是说在函数主体的末尾,您只需要省略关键字即可获得典型的ANF和其他函数符号的隐式返回,而是中间的一个,它立即从整个函数中返回。在ANF中通常如何表示?