у тя вообще все делается крайне странным методом
окей, смотри. Я делаю так: при парсинге блоков, создаю для каждого свою сущность питоньего класса. В самом интерпритаторе, я и оперирую этими сущностями. После того, как каждый блок перевёл в сущность, начинается пост-парсинг: все ветвления я укладываю в единый класс ConditionBranch. Это удобно, потому что в самом интерпритаторе, натыкаясь на сущность этого класса, могу просто передать ему экзекьютор и контекст, получив в итоге нужный блок кода (никак не связываясь с условиями, и прочим). Что довольно удобно, как бы ты не усирался об обратном