# C# - <s>373</s> 349 chars using C=System.Console;class P{static void Main(string[] z){try{for(dynamic c,p=z[0],a=new int[30000],s=new int[9],f=1>0,i=0,d=0,t=0;;){c=p[i];if(f&c==62)++d;if(f&c==60)--d;if(f&c==43)++a[d];if(f&c==45)--a[d];if(f&c==46)C.Write((char)a[d]);if(f&c==44)a[d]=C.Read();if(c==91)s[t++]=f?(f=a[d]!=0)?i:-1:i;i=(c==93&&f&(f|=s[--t]<0))?s[t]:++i;}}catch{}}} And more readable: using C=System.Console; class P { static void Main(string[] z) { try { for(dynamic c,p=z[0],a=new int[30000],s=new int[9],f=1>0,i=0,d=0,t=0;;) { c=p[i]; if(f&c==62)++d; if(f&c==60)--d; if(f&c==43)++a[d]; if(f&c==45)--a[d]; if(f&c==46)C.Write((char)a[d]); if(f&c==44)a[d]=C.Read(); if(c==91)s[t++]=f?(f=a[d]!=0)?i:-1:i; i=(c==93&&f&(f|=s[--t]<0))?s[t]:++i; } } catch{} } } Limitation is it only handles nested `[` up to 9 deep. Can make the `s` array bigger to handle more. Edit 373 -> 349: Removed outer loop (was for a different site), character comparisons to integers, moved `c` declaration into the for loop