###sysinclude stringextra.uh argc 3 < { ."Usage: furor brainfuck.upu brainfuckpgmfile\n" }{ 2 argv getfile sto bfpgm bfpgm '< >><< bfpgm '> >><< 100000 mem dup maximize sto bfmem // Memóriaallokáció a brainfuck memóriaterület számára tick sto startingtick sbr §brainfuck NL tick @startingtick #g - ."Time = " print ." tick\n" @bfmem free // A lefoglalt munkamemória felszabadítása } end // =================================================== brainfuck: #g @bfpgm~ !{ rts } // Ha nulla a brainfuck progi hossza, semmit se kell csinálni. zero p zero m // Indexregiszterek lenullázása (inicializálás) ((( @p @bfpgm~ < ) @p *2 [#n]@bfpgm // Az épp aktuális brainfuck utasítás kódja §jumpingtable[] [goto] // Ugrás a megfelelő brainfuck funkció rutinjára ____: inc p (<) _3c_: @m !{ rts } @[]bfpgm @p 32 >> !sum m goto §____ // < _3e_: @m @bfmem~ >= { rts } @[]bfpgm @p 32 >> sum m goto §____ // > _2b_: #c @[++]bfmem @m #g goto §____ // + _2d_: #c @[--]bfmem @m #g goto §____ // - _2c_: @bfmem @m getchar [^] goto §____ _2e_: @[]bfmem @m printchar goto §____ _5b_: @[]bfmem @m then §____ zero d @p ++ @bfpgm {~| @@ '[ == { inc d {<} } @@ '] == { @d !{ {+} sto p {>} } dec d } |} (<) _5d_: zero d 1 @p {|| {-} []@bfpgm '] == { inc d {<} } {-} []@bfpgm '[ == { @d !{ {} !sum p {>} } dec d } |} (<) )) rts // =================================================== { „startingtick” } { „bfpgm” } { „bfmem” } { „p” /* index az épp végrehajtandó brainfuck mnemonikra */ } { „m” /* index a brainfuck memóriaterületre */ } { „d” /* munkaváltozó */ } // ======================================== jumpingtable: // 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f /* 00 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 01 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 02 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_2b_ §_2c_ §_2d_ §_2e_ §____ /* 03 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_3c_ §____ §_3e_ §____ /* 04 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 05 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_5b_ §____ §_5d_ §____ §____ /* 06 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 07 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 08 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 09 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0a */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0b */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0c */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0d */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0e */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0f */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____