Für den heutigen Beitrag habe ich etwas in meiner PHP Wühlkiste gekramt und ein interessantes Proof of Concept gefunden. Es geht dabei um einen Interpreter für eine Sprache der in PHP geschrieben ist. Als Beispielsprache dient hierfür Brainfuck.
Brainfuck lässt sich bei den esoterischen Programmiersprachen finden und hatte eine sehr minimalistische Syntax. Es gibt genau 8 Zeichen und damit lassen sich nette Programme schreiben. Die Sprache ist auch Turing-vollständig und hat somit alles was ein Programmierer braucht 😉
Die Sytnax der Sprache besteht aus folgenden Zeichen:
> | inkrementiert den Pointer |
< | dekrementiert den Pointer |
+ | inkrementiert den Zellenwert |
– | dekrementiert den Zellenwert |
. | Ausgabe Zellenwert als Ascii-Zeichen |
, | Eingabe eines Ascii Zeichens und speichern des Werts in der akt. Zelle |
[ | While Schleife, springt hinter ] wenn der Zellenwert 0 ist |
] | Ende While Schleife |
Das beliebte „Hello World!“ sieht in Brainfuck dann beispielsweise so aus:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.
Viele Codebeispiele findet man bei Wikipedia oder indem man einfach mal nach Brainfuck sucht.
Nun kommen wir aber zu dem wirklich interessanten Teil. Daniel Lorch hat 2002 einen Interpreter in PHP geschrieben der Brainfuck-Programme ausführen kann. Da es mitunter etwas schwierig sein kann Zeichen direkt einzugeben, wird die Gesamteingabe von diesem Interpreter als String erwartet.
Das ganze ist natürlich nicht sehr schnell, aber funktioniert. Leider ist die Seite von Daniel nicht mehr zu erreichen und der Code eigentlich verloren, aber in der Wühlkiste habe ich die Version 1.01 gefunden. Den Link hierzu findet man am Ende des Artikels. Als Bestandteil des Archivs gibt es neben der Bibliothek zum Ausführen des BF-Codes auch noch ein paar Codebeispiele, mit denen man dann auch experimentieren kann.
Daniel hat die Sprache noch um das Zeichen # erweitert. Dadurch kann man während des Ausführung des Codes eine Debug-Ausgabe provozieren.
Download: php-brainfuck-1.01.tar.gz
Update (10.10.2011):
Der php Brainfuck Interpreter ist jetzt auch auf Github verfügbar.
https://github.com/dlorch/php-brainfuck