import re
def sym2cal(s):if '>' ins:returnlen(s)else:return -len(s)
def cal(s):if '+' ins:return '+= %d'%len(s)else:return '-= %d'%len(s)
def bf2asm(s,ptr,tab):
p= 0l=len(s)while(p
pattern= re.compile(r'([>
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
groups=match.groups()
ptr1= ptr + sym2cal(groups[0])
ptr2=ptr1for i in xrange(1,4):
ptr2+=sym2cal(groups[i])
ptr3=ptr2for i in xrange(4,12):
ptr3+=sym2cal(groups[i])
print tab+'mem[%d] += mem[%d]*mem[%d]'%(ptr3,ptr2,ptr1)for v ingroups:
ptr+=sym2cal(v)continuepattern= re.compile(r'([>
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
groups=match.groups()
ptr1=ptrfor i in xrange(3):
ptr1+=sym2cal(groups[i])
ptr2=ptr1for i in xrange(3,11):
ptr2+=sym2cal(groups[i])
print tab+'mem[%d] += mem[%d]'%(ptr2,ptr1)for v ingroups:
ptr+=sym2cal(v)continuepattern= re.compile(r'([>
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
groups=match.groups()
ptr1= ptr + sym2cal(groups[0])
ptr2= ptr1 + sym2cal(groups[1])
ptr3= ptr2 + sym2cal(groups[2])
print tab+'mem[%d] = mem[%d]'%(ptr1,ptr3)for v ingroups:
ptr+=sym2cal(v)continuepattern= re.compile(r'\[-\]')
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
print tab+'mem[%d] = 0'%(ptr)continuepattern= re.compile(r'>+')
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
ptr+=len(match.group())continuepattern= re.compile(r'
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
ptr-=len(match.group())continuepattern= re.compile(r'\++')
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
print tab+'mem[%d] %s'%(ptr,cal(match.group()))continuepattern= re.compile(r'-+')
match=pattern.match(s[p:])ifmatch:
p+=len(match.group())
print tab+'mem[%d] %s'%(ptr,cal(match.group()))continuec=s[p]if c == '[':
stk= 1
for i,v in enumerate(s[p+1:]):if v == '[':
stk+= 1elif v== ']':
stk-= 1
else:continue
if stk == 0:
print tab+'while mem[%d]:'%ptr
ptr= bf2asm(s[p+1:p+1+i],ptr,tab+'\t')
p+= i+1
break
continueelif c== ',':if input_ptr < 96:
print tab+'mov mem[%d] input[input_ptr]'%ptrelse:if bit_add >= 3600:
print tab+'mov mem[%d] 0x30'%ptrelse:
print tab+'mov mem[%d] 1'%ptr
elif c== '.':
print tab+'cmp mem[%d] data[data_ptr]'%ptr
p+= 1
returnptr
s= ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>[->+<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>,>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>]"input_ptr= 0bit_add= 0bf2asm(s,0,'')