bf interpreter
Here's a simple hello world program you can use to test it:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
variable cur create buf 2000 allot variable src-cur variable src-size create src 200 allot create find-buf cell allot 2 find-buf c! : findc find-buf 1 + 2dup 1 + c! c! find-buf find ; : src-size++ src-size @ 1 + src-size ! ; : src-cur-- src-cur @ 1 - src-cur ! ; : src++@ src-cur @ 1 + dup src-cur ! c@ ; : ?[ [char] [ = if 1 - then ; : ?] [char] ] = if 1 + then ; : scan-back begin src-cur-- src-cur @ c@ dup >r ?] r> ?[ dup 0= if exit then again ; : ++ cur @ @ 1 + cur @ ! ; : -- cur @ @ 1 - cur @ ! ; : >> cur @ cell + cur ! ; : << cur @ cell - cur ! ; : .. cur @ @ emit ; : [[ ; : ]] cur @ @ if 1 scan-back drop then ; : src-push src src-size @ + c! src-size++ ; : readline cr begin key dup emit dup 13 = if drop cr exit then src-push again ; : init src 1 - src-cur ! buf cur ! 0 src-size ! buf 2000 0 fill ; : done? src-cur @ 1 + src src-size @ + = ; : bf-run begin done? if exit then src++@ findc if execute else [char] ? emit drop then again ; : main begin init readline bf-run again ; .( Press esc to exit) cr cr main