Sprachauswahl: Deutsch / English

Brainfuck-Interpreter in Piet

[Bild: Brainfuck-Interpreter in Piet] Eingabe: Brainfuck-Programm (darf das Pipe-Symbol „|“ nicht enthalten), dann ein Pipe-Symbol und schließlich die Eingabe für das Brainfuck-Programm, sofern diese nicht leer ist.
Codel-Größe: 1 Pixel. Mit npiet getestet.

Konvertieren Sie Brainfuck-Programme in Piet-Programme

Sie können sich einen Brainfuck-Interpreter in Piet erzeugen lassen, der Ihr Brainfuck-Programm bereits hart kordiert enthält. Geben Sie einfach Ihr Brainfuck-Programm ein, um sich ein äquivalentes Piet-Programm erzeugen zu lassen.

Geben Sie Ihr Brainfuck-Programm hier ein:

Generelle Funktionsweise

Wie Brainfuck-Programme auf dem Stack gespeichert werden

Sei C=c0c1…cn−1 ein Brainfuck-Programm der Größe n. Seien s−k, s−k+1, …, s−1, s0, s1, …, sk−1, sk die von C genutzten Speicherzellen (oder mehr Speicherzellen) und 2k+1 die Anzahl der Speicherzellen, die von Null verschiedene Werte enthalten könnten. Sei m der Index der Speicherzelle, auf die der Brainfuck-Data-Pointer zeigt. Sei p schließlich der Index des Brainfuck-Kommandos cp, das als nächstes ausgeführt werden soll.

Das Brainfuck-Programm und sein Zustand werden wie folgt auf dem Piet-Stack gespeichert (von unten nach oben).
cn, cn−1, …, c2, c1, s0, s−1, s1, s−2, s2, …, s−k, sk, n, p, 2k+1, m

Wie der Brainfuck-Interpreter arbeitet

Die Module des Brainfuck-Interpreters können Sie Abbildung 1 entnehmen. Das Reader-Modul liest Zeichen vom Standard-Input, legt sie auf den Stack und zählt sie. Wenn das Pipe-Symbol gelesen wurde, wird die Reihenfolge der gelesenen Zeichen auf dem Stack invertiert. Dann werden die Werte s0=0, n, p=0, 2k+1=1 und m=0 auf den Stack geschrieben.

Jetzt kann der Interpreter mit der Ausführung des Brainfuck-Programms beginnen. Er liest mit Hilfe des Fetch-Moduls den Brainfuck-Befehl cp vom Stack und vergleicht ihn mit den ASCII-Codes für < > + - . , [ und ]. Nun kann der Interpreter cp ausführen. Am Ende wird p erhöht, sodass der nächste Befehl gelesen werden kann. Falls p=n gilt, wird das the Fetch-Modul den Interpreter beenden.

Abbildung 1: Die Module des Brainfuck-Interpreters. Oben: Das Reader-Modul. Rechts: Das Fetch-Modul. Unten: Ausführung eines Brainfuck-Befehls. Links: Das Modul zum hochzählen von p.