Artikelformat

Ein Interpreter in PHP (Teil 1)

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

5 Kommentare

  1. Hallo.

    Danke für diesen Artikel. Ich habe in der Vergangenheit bereits ein wenig damit experimentiert, eine höhere Sprache zu entwickeln, die per PHP zu brainfuck „kompiliert“ wird. (Das ist allerdings nie mehr geworden als eine Sammlung simpler assemblerartiger Befehle und Makros, also kein Vergleich zu den Dingen, die andere Leute damit anstellen. ;)) Auch die Ausführung per PHP zu erledigen, ist da natürlich interessant. Den verlinkten Code werde ich mir bei Gelegenheit sehr genau ansehen.

    Gruß Marc

    Antworten

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.