76 lines
1.4 KiB
Text
76 lines
1.4 KiB
Text
proc exec code$ . .
|
|
len mem[] 100
|
|
dp = 1
|
|
code$[] = strchars code$
|
|
ip = 1
|
|
while ip <= len code$[]
|
|
if dp > len mem[]
|
|
len mem[] len mem[] + 100
|
|
.
|
|
if dp < 1
|
|
print "programm error"
|
|
return
|
|
.
|
|
c$ = code$[ip]
|
|
if c$ = "+"
|
|
mem[dp] += 1
|
|
elif c$ = "-"
|
|
mem[dp] -= 1
|
|
elif c$ = ">"
|
|
dp += 1
|
|
elif c$ = "<"
|
|
dp -= 1
|
|
elif c$ = "."
|
|
write strchar mem[dp]
|
|
elif c$ = ","
|
|
print "input not implemented"
|
|
elif c$ = "["
|
|
if mem[dp] = 0
|
|
br = 1
|
|
repeat
|
|
ip += 1
|
|
if code$[ip] = "["
|
|
br += 1
|
|
elif code$[ip] = "]"
|
|
br -= 1
|
|
.
|
|
until br = 0
|
|
.
|
|
else
|
|
br[] &= ip
|
|
.
|
|
elif c$ = "]"
|
|
ip = br[len br[]] - 1
|
|
len br[] -1
|
|
.
|
|
ip += 1
|
|
.
|
|
.
|
|
func syntax code$ .
|
|
for i to len code$
|
|
h$ = substr code$ i 1
|
|
if h$ = "["
|
|
br += 1
|
|
elif h$ = "]"
|
|
br -= 1
|
|
.
|
|
if br < 0
|
|
return 0
|
|
.
|
|
.
|
|
return if br = 0
|
|
.
|
|
repeat
|
|
inp$ = input
|
|
until inp$ = ""
|
|
code$ &= inp$
|
|
.
|
|
if syntax code$ <> 1
|
|
print "syntax error"
|
|
return
|
|
.
|
|
exec code$
|
|
#
|
|
input_data
|
|
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>
|
|
---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
|