Brainfuck-- interpreter
Jump to navigation
Jump to search
This is an interpreter for brainfuck-- written by User:Wh1teWolf in Basic:
DIM tape(33)
DIM parentes(100)
DIM parentesvar(100)
tes=0
ptr=0
b=0
i=0
f=0
lol=0
REPEAT
counter=0
INPUT "" a$
REPEAT
b=b+1
IF MID$(a$,b,1)=">" THEN
ptr=ptr+1
IF ptr=32 THEN ptr=0
ENDIF
IF MID$(a$,b,1)="." THEN
lol=0
IF tape(0)=1 THEN
lol=1
ENDIF
IF tape(1)=1 THEN
lol=lol+2
ENDIF
IF tape(2)=1 THEN
lol=lol+4
ENDIF
IF tape(3)=1 THEN
lol=lol+8
ENDIF
IF tape(4)=1 THEN
lol=lol+16
ENDIF
IF tape(5)=1 THEN
lol=lol+32
ENDIF
IF tape(6)=1 THEN
lol=lol+64
ENDIF
IF tape(7)=1 THEN
lol=lol+128
ENDIF
IF lol>0 THEN
PRINT CHR$(lol)
ELSE
f=0
REPEAT
f=INKEY(1)
UNTIL f<>-1
PRINT CHR$(f)
IF f>=128 THEN
tape(7)=1
f=f-128
ENDIF
IF f>=64 THEN
tape(6)=1
f=f-64
ENDIF
IF f>=32 THEN
tape(5)=1
f=f-32
ENDIF
IF f>=16 THEN
tape(4)=1
f=f-16
ENDIF
IF f>=8 THEN
tape(3)=1
f=f-8
ENDIF
IF f>=4 THEN
tape(2)=1
f=f-4
ENDIF
IF f>=2 THEN
tape(1)=1
f=f-2
ENDIF
IF f>=1 THEN
tape(0)=1
f=f-1
ENDIF
ENDIF
ENDIF
IF MID$(a$,b,1)="+" THEN
IF tape(ptr)=1 THEN tape(ptr)=0 ELSE tape(ptr)=1
ENDIF
IF MID$(a$,b,1)="[" THEN
tes=tes+1
counter=tape(ptr)
parentesvar=ptr
parentes(tes)=b
IF counter=0 THEN
REPEAT
b=b+1
UNTIL MID$(a$,b,1)="]"
ENDIF
ENDIF
IF MID$(a$,b,1)="]" THEN
IF tape(parentesvar)<>0 THEN
b=parentes(tes)
ENDIF
IF tape(parentesvar)=0 THEN
tes=tes-1
ENDIF
ENDIF
UNTIL b=1000
a$=""
b=0
tes=0
FOR i=1 TO 100
parentes(i)=0
NEXT
UNTIL FALSE