Execute Brain****: Difference between revisions
Content added Content deleted
(→{{header|Vlang}}: Rename "Vlang" in "V (Vlang)") |
|||
Line 4,097: | Line 4,097: | ||
/* 0e */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ |
/* 0e */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ |
||
/* 0f */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ |
/* 0f */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ |
||
</syntaxhighlight> |
|||
=={{header|Peri}}== |
|||
<syntaxhighlight lang="peri"> |
|||
###sysinclude standard.uh |
|||
###sysinclude args.uh |
|||
###sysinclude str.uh |
|||
###sysinclude io.uh |
|||
#g argc 3 < { ."Usage: peri brainfuck02.upu brainfuckfile\n" }{ |
|||
2 argv getfile |
|||
sto bfpgm |
|||
tick sto startingtick |
|||
@bfpgm '< >><< |
|||
@bfpgm '> >><< |
|||
@bfpgm '+ >><< |
|||
@bfpgm '- >><< |
|||
100000 mem dup maximize sto bfmem // Memóriaallokáció a brainfuck memóriaterület számára |
|||
sbr §brainfuck |
|||
NL |
|||
tick @startingtick #g - ."Time = " print ." tick\n" |
|||
@bfmem inv mem // A lefoglalt munkamemória felszabadítása |
|||
} |
|||
end |
|||
// =================================================== |
|||
brainfuck: |
|||
#g bfpgm~ inv { rts } // Ha nulla a brainfuck progi hossza, semmit se kell csinálni. |
|||
zero pp zero mm // Indexregiszterek lenullázása (inicializálás) |
|||
mainloop: |
|||
@pp bfpgm~ >= { rts } |
|||
@bfpgm @pp [] // Az épp aktuális brainfuck utasítás kódja |
|||
$ffffffff & |
|||
goto §jumpingtable[] // Ugrás a megfelelő brainfuck funkció rutinjára |
|||
____: ++() pp goto §mainloop |
|||
_3c_: @mm inv { rts } @bfpgm @pp [] 32 >> inv sum mm goto §____ // < |
|||
_3e_: @mm bfmem~ >= { rts } @bfpgm @pp [] 32 >> sum mm goto §____ // > |
|||
_2b_: @bfmem @mm [] @bfpgm @pp [] 32 >> #c + goto §minusba // + |
|||
_2d_: @bfmem @mm [] @bfpgm @pp [] 32 >> #c - minusba: @bfmem @mm inv rot inv [] #g goto §____ // - |
|||
_2c_: @bfmem @mm getchar inv [] goto §____ |
|||
_2e_: @bfmem @mm [] printchar goto §____ |
|||
_5b_: @bfmem @mm [] then §____ |
|||
zero dd @pp ++ bfpgm~ {{ , |
|||
@bfpgm {{}} [] '[ == { ++() dd {{<}} } |
|||
@bfpgm {{}} [] '] == { @dd inv { {{+}} sto pp {{>}} } --() dd } |
|||
}} goto §mainloop |
|||
_5d_: zero dd 1 @pp {{ , @bfpgm {{-}} [] '] == { ++() dd {{<}} } |
|||
@bfpgm {{-}} [] '[ == { @dd inv { {{}} inv sum pp {{>}} } --() dd } |
|||
}} goto §mainloop |
|||
// =================================================== |
|||
{ „startingtick” } |
|||
{ „bfpgm” } |
|||
{ „bfmem” } |
|||
{ „pp” /* index az épp végrehajtandó brainfuck mnemonikra */ } |
|||
{ „mm” /* index a brainfuck memóriaterületre */ } |
|||
{ „dd” /* 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 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ |
|||
</syntaxhighlight> |
|||
Yet another solution: |
|||
<syntaxhighlight lang="peri"> |
|||
###sysinclude standard.uh |
|||
###sysinclude args.uh |
|||
###sysinclude str.uh |
|||
###sysinclude io.uh |
|||
#g argc 3 < { ."Usage: peri brainfuck02.upu brainfuckfile\n" }{ |
|||
2 argv getfile |
|||
sto bfpgm |
|||
tick sto startingtick |
|||
@bfpgm '< >><< |
|||
@bfpgm '> >><< |
|||
@bfpgm '+ >><< |
|||
@bfpgm '- >><< |
|||
100000 mem dup maximize sto bfmem // Memóriaallokáció a brainfuck memóriaterület számára |
|||
sbr §brainfuck |
|||
NL |
|||
tick @startingtick #g - ."Time = " print ." tick\n" |
|||
@bfmem inv mem // A lefoglalt munkamemória felszabadítása |
|||
} |
|||
end |
|||
// =================================================== |
|||
brainfuck: |
|||
#g bfpgm~ inv { rts } // Ha nulla a brainfuck progi hossza, semmit se kell csinálni. |
|||
zero pp zero mm // Indexregiszterek lenullázása (inicializálás) |
|||
switchlabel: |
|||
switch "<>+-,.[]" §_3c_ §_3e_ §_2b_ §_2d_ §_2c_ §_2e_ §_5b_ §_5d_ |
|||
mainloop: |
|||
safe case#c bfpgm[pp] §rtslabel // Ugrás a megfelelő brainfuck funkció rutinjára |
|||
____: ++() pp goto §mainloop |
|||
_3c_: safe bfpgm[pp] §rtslabel hilo inv sum mm goto §____ // < |
|||
_3e_: safe bfpgm[pp] §rtslabel hilo sum mm goto §____ // > |
|||
_2b_: bfpgm[pp] hilo safe sum#c bfmem[mm] §safelabel goto §____ // + |
|||
_2d_: bfpgm[pp] hilo safe inv sum#c bfmem[mm] §safelabel goto §____ // - |
|||
_2c_: getchar safe inv bfmem[mm] §rtslabel goto §____ |
|||
_2e_: safe bfmem[mm] §rtslabel printchar goto §____ |
|||
_5b_: safe bfmem[mm] §rtslabel then §____ |
|||
switch "[]" §lbl5b0 §lbl5b1 |
|||
zero dd @pp ++ bfpgm {~ , |
|||
{~?~} case |
|||
{~<~} |
|||
lbl5b0: ++() dd {~<~} |
|||
lbl5b1: @dd inv { {~+~} sto pp goto §switchlabel } --() dd |
|||
~} goto §switchlabel |
|||
_5d_: switch "[]" §lbl5d0 §lbl5d1 |
|||
zero dd 1 @pp {{ , |
|||
bfpgm[{{-}}] case |
|||
{{<}} |
|||
lbl5d1: ++() dd {{<}} |
|||
lbl5d0: @dd inv { {{}} inv sum pp goto §switchlabel } --() dd |
|||
}} goto §switchlabel |
|||
rtslabel: rts |
|||
safelabel: ."Wrong program!" end |
|||
// =================================================== |
|||
{ „startingtick” } |
|||
{ „bfpgm” } |
|||
{ „bfmem” } |
|||
{ „pp” /* index az épp végrehajtandó brainfuck mnemonikra */ } |
|||
{ „mm” /* index a brainfuck memóriaterületre */ } |
|||
{ „dd” /* munkaváltozó */ } |
|||
// =================================================== |
|||
</syntaxhighlight> |
</syntaxhighlight> |