# 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)