Преобразование операторов возврата в нормальную форму - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь выяснить, как преобразовать императивный код в A-нормальную форму.Я вижу, как это сделать для многих конструкций.Например, цикл do ... while может преобразовать в

letrec
    loop() =
        body
        let t = test
        if t then loop() else ()
    loop()

. continue в теле преобразует в немедленный хвостовой рекурсивный вызов loop().break будет преобразовывать в хвостовой рекурсивный вызов следующий фрагмент кода после цикла.

Но во что преобразует оператор return?Я не имею в виду одно в конце тела функции, где вам просто нужно исключить ключевое слово, чтобы получить неявный возврат, типичный для ANF и других функциональных обозначений, но одно в середине, которое сразу же возвращается из всей функции.Как это обычно представлено в ANF?

...