# Python (no eval), 317 bytes <!-- language-all: lang-python --> from sys import* def f(u,c,k): while(c[1]>=k)*u: j,u='[]<>+-,.'.find(u[0]),u[1:];b=(j>=0)*(1-j%2*2);c[1]+=b*(j<2) while b*c[c[0]]and j<1:f(u,c,k+1);c[1]+=1 b*=c[1]==k;c[[0,c[0],2][j/2-1]]+=b if(j==6)*b:c[c[0]]=ord(stdin.read(1)) if(j>6)*b:stdout.write(chr(c[c[0]])) f(open(argv[1]).read(),[-1]+[0]*30003,0)