Я пытаюсь выяснить, как преобразовать императивный код в A-нормальную форму.Я вижу, как это сделать для многих конструкций.Например, цикл do ... while
может преобразовать в
letrec
loop() =
body
let t = test
if t then loop() else ()
loop()
. continue
в теле преобразует в немедленный хвостовой рекурсивный вызов loop()
.break
будет преобразовывать в хвостовой рекурсивный вызов следующий фрагмент кода после цикла.
Но во что преобразует оператор return
?Я не имею в виду одно в конце тела функции, где вам просто нужно исключить ключевое слово, чтобы получить неявный возврат, типичный для ANF и других функциональных обозначений, но одно в середине, которое сразу же возвращается из всей функции.Как это обычно представлено в ANF?