Brainfuck Programmiersprache / Interpreter
Kategorisierung: | Esoterische Programmiersprache |
Siehe auch: | Ook-Ook!, Cow, Hohoho! |
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:
Zeichen | C-Äquivalent | Semantik |
> | ++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)