brainfuck: run!$< # This number determins the size of memory create_mem!255: create_mem!(\d+): " $1=0" create_mem!$(add($1,1)) strip_code!.*?([-+<>\[\],\.]+)(.*): "$1" strip_code!$2 strip_code!.*: add_mod256!255!1: "0" add_mod256!0!-1: "255" add_mod256!(\d+)!(-?\d+): add($1,$2) add_mem!(\d+)!(.*? \1=)(\d+)(.*?)!(.*): "$2$(add_mod256!$3!$5)$4" get_mem!(\d+)!.*? \1=(\d+).*: "$2" set_mem!(\d+)!(.*? \1=)(\d+)(.*?)!(.*): "$2$5$4" .*_mem!.*: "ERROR: memory index out of range!\n" itoc: " 0= 1= 2= 3= 4= 5= 6= 7= 8= 9= 10=\n 11= 12= 13=\r 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=0 49=1 50=2 51=3 52=4 53=5 54=6 55=7 56=8 57=9 58=: 59=; 60=< 61== 62=> 63=? 64=@ 65=A 66=B 67=C 68=D 69=E 70=F 71=G 72=H 73=I 74=J 75=K 76=L 77=M 78=N 79=O 80=P 81=Q 82=R 83=S 84=T 85=U 86=V 87=W 88=X 89=Y 90=Z 91=[ 92=\\ 93=] 94=^ 95=_ 96=` 97=a 98=b 99=c 100=d 101=e 102=f 103=g 104=h 105=i 106=j 107=k 108=l 109=m 110=n 111=o 112=p 113=q 114=r 115=s 116=t 117=u 118=v 119=w 120=x 121=y 122=z 123={ 124=| 125=} 126=~ 127= 128= 129= 130= 131= 132= 133= 134= 135= 136= 137= 138= 139= 140= 141= 142= 143= 144= 145= 146= 147= 148= 149= 150= 151= 152= 153= 154= 155= 156= 157= 158= 159= 160= 161= 162= 163= 164= 165= 166= 167= 168= 169= 170= 171= 172= 173= 174= 175= 176= 177= 178= 179= 180= 181= 182= 183= 184= 185= 186= 187= 188= 189= 190= 191= 192= 193= 194= 195= 196= 197= 198= 199= 200= 201= 202= 203= 204= 205= 206= 207= 208= 209= 210= 211= 212= 213= 214= 215= 216= 217= 218= 219= 220= 221= 222= 223= 224= 225= 226= 227= 228= 229= 230= 231= 232= 233= 234= 235= 236= 237= 238= 239= 240= 241= 242= 243= 244= 245= 246= 247= 248= 249= 250= 251= 252= 253= 254= 255= " putc!(\d+)!.*?\1=(.).*: "$2" putc!(\d+): putc!$1!$(itoc) getc!(.)!.*? (\d+)=\1 .*: "$2" getc!(.): getc!$1!$(itoc) find_end!\](.*?)!0: "]!$1" find_end!\](.*?)!(\d+): "]" find_end!$1!$(sub($2,1)) find_end!\[(.*?)!(\d+): "[" find_end!$1!$(add($2,1)) find_end!(.)(.*?)!(\d+): "$1" find_end!$2!$3 find_end!!.*: "ERROR: unmatched [ !!" # $1 == loop, $2 == after_loop, $3 == mem, $4 == stack, $5 == input loop_start!0!(.*?)!(.*?)!(.*?)!(.*?)!(.*): exec!$2!$3!$4!$5 loop_start!.*?!(.*?)!(.*?)!(.*?)!(.*?)!(.*): exec!$1$2!$3![$1;$4!$5 # exec!code!mem!stack!input exec!!.*: exec!>(.*?!)(\d+)(.*): exec!$1$(add($2,1))$3 exec!<(.*?!)(\d+)(.*): exec!$1$(sub($2,1))$3 # $1 == "" or "-", $2 == code, $3 == mindex, $4 == mem, $5 == stack+input exec!(?\:(-)|\+)(.*?)!(.*?)( .*?)(!.*): exec!$2!$3$(add_mem!$3!$4!$11)$5 # $1 == code, $2 == mindex, $3 == mem, $4 == "!"+stack+input exec!\.(.*?)!(.*?)( .*?)(!.*): putc!$(get_mem!$2!$3) exec!$1!$2$3$4 # $1 == code, $2 == mindex, $3 == mem, $4 == "!"+stack+input exec!\[(.*?)!(.*?)( .*?)(!.*): loop_start!$(get_mem!$2!$3)!$(find_end!$1!0)!$2$3$4 # $1 == code, $2 == mem, $3 == stack_top, $4 == rest exec!\](.*?)!(.*?)!(.*?);(.*): exec!$3$1!$2!$4 exec!\](.*?)!(.*?)!!(.*): "ERROR: unmatched ] !\n" # $1 == code, $2 == mindex, $3 == mem, $4 == stack, $5,*$6 == input exec!,(.*?)!(.*?)( .*?)!(.*?)!(.)(.*): exec!$1!$2$(set_mem!$2!$3!$(getc!$5))!$4!$6 exec!,(.*?)!(.*?)( .*?)!(.*?)!: exec!$1!$2$(set_mem!$2!$3!0)!$4!$6 run!(.*?)(!(.*))?: exec!$(strip_code!$1)!50$(create_mem!0)!!$3 #include "std/num.wake" .*?(ERROR.*?)!.*: "$1!\n"