drracket 中是否有用于 label、goto、jump 命令的包?
该控制程序包提供了以下错误:
(let ([x 1])
(let/ec return
(begin/goto
(label l1)
(set! x (+ x 1))
(when (= x 10000000)
(return x))
(goto l1)
2)))
Run Code Online (Sandbox Code Playgroud)
转到:未定义;
不能引用未定义的标识符
需要模拟标签、转到/跳转以在 LLVM IR 中运行代码,因此使用循环重写不是一种选择。
首先:很明显,soegaard 的 Control 包无法正常工作,我猜这是因为过去几年对语法系统进行了更新。
第二:如果您正在模拟 LLVM,则不需要标签和 goto。只需将代码分解为基本块,并将每个基本块建模为一个函数。然后每个 goto 都变成了一个函数调用。你绝对可以自动化这个。
很抱歉说得太简短了。如果您需要更多详细信息,请告诉我。