module til-eval-stats imports til-eval-var signature constructors Goto : String -> Stat strategies eval-block = ?Block() eval-stats = {| EvalVar : map(eval-stat) |} eval-stat = //debug(!"eval-stat: "); ( eval-assign <+ eval-write <+ eval-declaration <+ eval-block <+ eval-if <+ eval-while <+ EvalGoto //) eval-if = IfElse(eval-exp, id, id) ; EvalIf ; eval-stat eval-while = ?While(e, st*) ; where(new => label) ; where((st*, [Goto(label)]) => st2*) ; rules( EvalGoto : Goto(label) -> IfElse(e, st2*, []) ) ; Goto(label)