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