0

C ++で簡単なプログラムインタープリターを書いています。プログラムの内部表現を構築しているときに break ステートメントを取得した場合、どのように囲んでいるループのターゲット位置を決定すればよいですか?

void Imp::whilestmt()
{
    Expr *pExpr;
    accept(Token::WHILE);
    expr(pExpr);
    WhileStmt *pwhilestmt = new WhileStmt(pExpr,vm.getLocationCounter);
    vm.add(pwhilestmt);
    accept(Token::LOOP);
    stmtlist();
    pwhilestmt->setTarget(vm.getLocationCounter);
    accept(Token::END);
    accept(Token::LOOP);
    vm.add(new EndLoopStmt);
}

私の break ステートメント オブジェクトは、while ステートメントのターゲットをパラメーターとして受け取ります。これを決定するにはどうすればよいですか?

4

3 に答える 3

3

一種の実行ツリー/パイプラインを構築することを検討します。すべての LOOP/WHILE は (すべての関数と同様に) 新しい分岐になるため、END/BREAK 命令に遭遇すると、分岐の起点に戻ってその行を続行します。

于 2013-05-18T08:15:21.743 に答える