global cs
global ip
global ss
#global sp
global ds
global bp
global tab
global out
#cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
ip =
ss = []
#sp =
ds = []
bp =
tab =
out = []
def tab_():
i = tab
stab = ''
while i > :
stab += '\t'
i -=
return stab
def push(var):
global ss
ss.append(var)
def pop():
global ss
return ss.pop()
def op_inc_val():
global ip
count =
while True:
op = cs[ip]
ip = ip +
if op == '+':
count = count +
else:
break
print tab_()+'ds[%d] += %d'%(bp, count)
def op_dec_val():
global ip
count =
while True:
op = cs[ip]
ip = ip +
if op == '-':
count = count +
else:
break
print tab_()+'ds[%d] -= %d'%(bp, count)
def op_inc_dp():
global bp
bp = bp +
def op_dec_dp():
global bp
bp = bp -
def op_jmp_fwd():
global tab
print tab_()+'while ds[%d]:'%(bp)
tab = tab +
def op_jmp_bck():
global tab
tab = tab -
def op_out():
print tab_()+'putchar(ds[%d])'%(bp)
def op_in():
print tab_()+'getchar'
end = len(cs)
while ip < end:
op = cs[ip]
ip = ip +
if op == '+':
ip = ip -
op_inc_val()
ip = ip -
elif op == '-':
ip = ip -
op_dec_val()
ip = ip -
elif op == '>':
op_inc_dp()
elif op == '<':
op_dec_dp()
elif op == '[':
op_jmp_fwd()
elif op == ']':
op_jmp_bck()
elif op == '.':
op_out()
elif op == ',':
op_in()
else:
print 'invalid opcode'
break