1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| def interp(code): data=[0 for _ in range(30000)] pc=0 ptr=0 st=[] while(pc<len(code)): c=code[pc] print("正在处理字符'{}'".format(c)) if c=='<': ptr-=1 elif c=='>': ptr+=1 elif c=='+': data[ptr]+=1 elif c=='-': data[ptr]-=1 elif c=='.': print(data[ptr]) elif c==',': data[ptr]=input() elif c=='[': if data[ptr]!=0: print('{}不为0,开始循环'.format(data[ptr])) st.append(pc) print('入栈',pc) else: print('不循环了') cnt=0 fx=0 for i in code[pc:]: fx+=1 if i=='[': cnt+=1 if i==']': cnt-=1 if cnt==0: break if cnt==0: print('匹配') pc=pc+fx-1 print('pc前往下标',pc)
elif c==']': pc=st.pop()-1 pc+=1
print('\n\n测试样例1:\n\n') interp('+[+--].')
print('\n\n测试样例2:\n\n') interp('++++.>+--.')
|