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