Brainfuck Programmiersprache / Interpreter

Herkunft / Verwendung:Brainfuck ist eine esoterischen Programmiersprache, die der Schweizer Urban Müller im Jahre 1993 entwarf. Sie verwendet die Zeichen '><+-.,[]', um die wichtigsten Programmfunktionen (Zeiger, Werte, Ausgabe, Eingabe, Sprünge) abzubilden. Sie ist schwer lesbar, umständlich und ineffizient und eher als Scherz oder Machbarkeitsstudie gedacht.

Müllers Ziel war es, eine einfache Turing-vollständige Sprache zu entwerfen, welche mit einem möglichst kleinen Compiler übersetzt werden konnte – inspiriert wurde er dabei durch False, eine andere esoterische Programmiersprache, deren Compiler nur 1024 Byte groß war. Es gelang ihm schließlich, die zweite Version seines Compilers für den Commodore-Amiga in lediglich 240 Byte zu schreiben. Brian Raiter konnte dies unterbieten, indem er – unter Verwendung von nur 171 Bytes – einen Brainfuck-Compiler für x86 Linux schrieb. Für MS-DOS gibt es einen Brainfuck-Interpreter von Bertram Felgenhauer mit einer Größe von nur 98 Bytes.

Spezifikation

Ein Brainfuck-Programm ähnelt stark der formalen Definition einer Turingmaschine. Statt eines Lese-/Schreibkopfes auf einem Band, Zuständen, sowie einem frei definierbaren Alphabet werden jedoch im Sinne einer iterativen Programmiersprache ein Zeiger auf ein Datenfeld, Schleifenkonstrukte und eine rudimentäre arithmetisch-logische Einheit verwendet.

Brainfuck besitzt acht Befehle, jeweils bestehend aus einem einzigen Zeichen:

ZeichenC-ÄquivalentSemantik
>++ptr;erhöht den Zeiger um eins
<--ptr;vermindert den Zeiger um eins
+++*ptr;erhöht den aktuellen Zellwert um eins
---*ptr;vermindert den aktuellen Zellwert um eins
.putchar(*ptr);gibt den aktuellen Zellenwert als ASCII-Zeichen aus
,*ptr = getchar();Holt ein Zeichen von der Eingabe und speichert dessen ASCII-Wert in der aktuellen Zelle
[while (*ptr) {springt nach vorne, hinter den passenden ]-Befehl, wenn der aktuelle Zellenwert 0 ist
]}springt zurück, hinter den passenden [-Befehl, wenn der aktuelle Zellenwert nicht 0 ist

Beispiel

Klartext:Beispielklartext
Kodiert:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++.+++++++++++++++++++++++++++++++++++.++++.++++++++++.- --.-------.----.+++++++.-.+.-----------.+++++++++++++++++.++ .---------------.+++++++++++++++++++.----.
++++++++++ [ >+++++++>++++++++++>+++>+<<<<- ] Schleife zur Vorbereitung der Textausgabe >++. Ausgabe von 'H' >+. Ausgabe von 'e' +++++++. 'l' . 'l' +++. 'o' >++. Leerzeichen <<+++++++++++++++. 'W' >. 'o' +++. 'r' ------. 'l' --------. 'd' >+. '!' >. Zeilenvorschub +++. Wagenrücklauf

Code / Chiffre online dekodieren / entschlüsseln bzw. kodieren / verschlüsseln (DeCoder / Encoder / Solver-Tool)