擅长:python、mysql、java
<p>“递归执行”不适合<code>goto</code>。要使<code>goto</code>工作,您需要一台PC、“程序计数器”,并且程序中的每个语句都必须有一个不同的地址。当它被执行时,每个语句的地址被分配给PC。当遇到<code>goto</code>时,goto的目标地址(它的参数)被放入PC,然后从那里继续执行。在</p>
<p>使用基于堆栈的递归方法几乎不可能实现这一点。您有两种选择:</p>
<ul>
<li><p>将AST展平到一个序列中,在该序列中可以为每个语句分配不同的地址</p></li>
<li><p>给你的翻译添加一个“跳过”模式。当遇到<code>goto</code>时,抛出一个<code>GotoException</code>,它从所有堆栈帧中分离出来并返回根。进程语句(跳过它们而不执行)直到到达目标地址。</p></li>
</ul>
<p>我想您可以想象,<code>goto</code>的这个实现性能不高,而且可能很难实现。在</p>