|
elkövette: Kétszeri Csaba
LEÍRÁS
/***************************************************************************
*
*
* PHP Brainfuck Interpreter (c): Kétszeri Csaba (Csabii), 2003
*
* csaba##kukac##ketszeri.hu http://www.ketszeri.hu/
*
*
*
* Készült az 1. Magyar PHP Konferenciára
*
*
*
* A kód módosítások nélkül szabadon terjeszthető
*
*
*
****************************************************************************/
A Brainfuck egy úgynevezett "ezoterikus" programozási nyelv, azaz
"szándékosan használhatatlan" (Chris Pressey). A Brainfuck Urban
Müller fejlesztése, akinek a célja a legkisebb létező fordító program
megírása volt. Ez a fordító 240 bájt volt (lefordított ASM)!
Urban müller írt egy C interpretert:
char
m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;main(){for(read(0,r,4000);c=*r;
r++)c-']'||(d>1||(r=*p?*s:(--s,r)),!d||d--),c-'['||d++||(*++s=r),d||(*p+=c==
'+',*p-=c=='-',p+=c=='>',p-=c=='<',c-'.'||write(2,p,1),c-','||read(2,p,1));}
Bár a Brainfuck egy nagyon korlátozott szolgáltatásokat nyújtó nyelv
(csak 8 operátora van, nincsenek változó nevek, stb.), Turing-gép
kompatibilis, azaz tetsztőleges számítástechikai feladat megoldható vele.
Az operátorok: +-<>[].,
+ bájt értékét növeli a pointer által mutatott területen
- bájt értékét növeli a pointer által mutatott területen
> pointer növelése
< pointer csökkentése
[ ciklus kezdete, ha a pinter által mutatott bájt nem nulla
] visszatér a vezérlés a [ operátorhoz
. bájt kiirása a stdout-ra
, bájt olvasása a stdin-ről
Mivel a PHP nem tesz lehetővé interaktív szövegbevitelt és kiíratást,
a PHP Brainfuck Interpreter egy formot használ a kód és az input
beolvasására, és szövegesen, a kód lefutása után írja ki a kimenetet
a böngésző felé. A kód érdekessége, hogy egyetlen for ciklusból áll.
Közismert(?), hogy C nyelven, de PHP-ban is minden probléma megoldható
egy for cikluson belül.
A nyelv tanulásához egy nagyon jó tutorial található a következő címen:
(angol nyelven)
http://nieko.net/data/bf.txt
A PHP Brainfuck Interpreter pontosan 512 bájt hosszú/rövid.
Az első input boxba kerül a futtatandó kód, a második mint STDIN buffer,
azaz a teljes input, amit fel akarsz dolgozni a kóddal (opcionális).
Ez a dokumentum, a Brainfuck Interpreter,, a tutorial és a
PHP Brainfuck Interpreter módosítások nélkül szabadon terjeszthető.
Egy "Hello World!" program Brainfuck nyelven:
++++++++[>+++++++++<-]>.<+++++[>++++++<-]>-.+++++++..+++.<++++++++[>>++++<<-]>>.<<++++[>------<-]>.<++++[>++++++<-]>.+++.------.--------.>+.
Copyright (c) 2002 Nieko Maatjes
Tipp: A tutorial jóval egyszerűbb kódokkal indul, nyugodtan vágj bele,
és játszadozz kedvedre!
Csabii
|