Я слышал, что теоретически возможно выразить любой поток управления на языке Turing-complete, используя только конструктивные программирующие конструкции (условные обозначения, циклы и перерывы цикла и вызовы подпрограмм) без каких-либо произвольных GOTO
заявления. Есть ли способ использовать эту теорию для автоматизации рефакторинга кода, который содержит GOTO
, в код, который не работает?
Скажем, у меня есть произвольная одна подпрограмма на простом императивном языке, например C или Pascal. У меня также есть синтаксический анализатор, который может проверить, что эта подпрограмма действительна, и создать из нее абстрактное дерево синтаксиса. Но код содержит GOTO
и ярлыки, которые могут прыгать вперед или назад в любую произвольную точку, в том числе в или из условных или циклов, но не вне самой подпрограммы.
Есть ли алгоритм, который мог бы взять этот AST и переработать его в новый код, который семантически идентичен, но не содержит выражений Labels или GOTO
?