Реализация циклов Brainfuck в интерпретаторе
Я хочу создать интерпретатор Brainfuck (чёрт возьми, это имя) на моем только что созданном языке программирования, чтобы доказать его полноту по Тьюрингу.
Теперь все понятно пока (<>+-,.
) - кроме одного: петли ([]
). Я предполагаю, что вы знаете (очень жесткий) синтаксис BF с этого момента:
Как может выглядеть псевдокод? Что делать, когда интерпретатор достигает начала цикла ([
) или конец цикла (]
)?
Проверка, должен ли цикл продолжаться или останавливаться, не является проблемой (current cell==0
), но:
Поскольку циклы могут быть вложенными, я предполагаю, что я не могу просто использовать переменную, содержащую начальную позицию текущего цикла.
Я видел очень маленькие интерпретаторы BF, реализованные на разных языках, мне интересно, как им удалось заставить работать циклы, но я не могу понять это.