|      1 // A Small Compiler for the WHILE Language |      1 // A Small Compiler for the WHILE Language | 
|      2 // (stub for including arrays) |      2 //  - includes arrays and a small parser for | 
|         |      3 //    translated BF programs | 
|      3  |      4  | 
|      4 // the abstract syntax trees |      5 // the abstract syntax trees | 
|      5 abstract class Stmt |      6 abstract class Stmt | 
|      6 abstract class AExp |      7 abstract class AExp | 
|      7 abstract class BExp  |      8 abstract class BExp  | 
|      8 type Block = List[Stmt] |      9 type Block = List[Stmt] | 
|      9  |     10  | 
|     10 // statements |     11 // statements | 
|     11 case object Skip extends Stmt |     12 case object Skip extends Stmt | 
|         |     13 case class Array(s: String, n: Int) extends Stmt | 
|     12 case class If(a: BExp, bl1: Block, bl2: Block) extends Stmt |     14 case class If(a: BExp, bl1: Block, bl2: Block) extends Stmt | 
|     13 case class While(b: BExp, bl: Block) extends Stmt |     15 case class While(b: BExp, bl: Block) extends Stmt | 
|     14 case class Assign(s: String, a: AExp) extends Stmt |     16 case class Assign(s: String, a: AExp) extends Stmt | 
|     15 case class AssignA(s: String, a1: AExp, a2: AExp) extends Stmt |     17 case class AssignA(s: String, a1: AExp, a2: AExp) extends Stmt | 
|     16 case class Write(s: String) extends Stmt  // writes out a variable |     18 case class Write(s: String) extends Stmt | 
|     17 case class Array(s: String, n: Int) extends Stmt  |     19 case class Read(s: String) extends Stmt | 
|     18  |     20  | 
|     19 // arithmetic expressions |     21 // arithmetic expressions | 
|     20 case class Var(s: String) extends AExp |     22 case class Var(s: String) extends AExp | 
|     21 case class Num(i: Int) extends AExp |     23 case class Num(i: Int) extends AExp | 
|     22 case class Aop(o: String, a1: AExp, a2: AExp) extends AExp |     24 case class Aop(o: String, a1: AExp, a2: AExp) extends AExp | 
|     23 case class Ref(s: String, a1: AExp) extends AExp |     25 case class Ref(s: String, a: AExp) extends AExp | 
|     24  |     26  | 
|     25 // boolean expressions |     27 // boolean expressions | 
|     26 case object True extends BExp |     28 case object True extends BExp | 
|     27 case object False extends BExp |     29 case object False extends BExp | 
|     28 case class Bop(o: String, a1: AExp, a2: AExp) extends BExp |     30 case class Bop(o: String, a1: AExp, a2: AExp) extends BExp | 
|     73   counter += 1 |    109   counter += 1 | 
|     74   x ++ "_" ++ counter.toString() |    110   x ++ "_" ++ counter.toString() | 
|     75 } |    111 } | 
|     76  |    112  | 
|     77 // environments and instructions |    113 // environments and instructions | 
|     78 type Env = Map[String, String] |    114 type Env = Map[String, Int] | 
|     79 type Instrs = List[String] |    115  | 
|         |    116 // convenient string interpolations  | 
|         |    117 // for instructions and labels | 
|         |    118 import scala.language.implicitConversions | 
|         |    119 import scala.language.reflectiveCalls | 
|         |    120  | 
|         |    121 implicit def sring_inters(sc: StringContext) = new { | 
|         |    122     def i(args: Any*): String = "   " ++ sc.s(args:_*) ++ "\n" | 
|         |    123     def l(args: Any*): String = sc.s(args:_*) ++ ":\n" | 
|         |    124 } | 
|         |    125  | 
|         |    126 def compile_op(op: String) = op match { | 
|         |    127   case "+" => i"iadd" | 
|         |    128   case "-" => i"isub" | 
|         |    129   case "*" => i"imul" | 
|         |    130 } | 
|     80  |    131  | 
|     81 // arithmetic expression compilation |    132 // arithmetic expression compilation | 
|     82 def compile_aexp(a: AExp, env : Env) : Instrs = a match { |    133 def compile_aexp(a: AExp, env : Env) : String = a match { | 
|     83   case Num(i) => List("ldc " + i.toString + "\n") |    134   case Num(i) => i"ldc $i" | 
|     84   case Var(s) => List("iload " + env(s) + "\n") |    135   case Var(s) => i"iload ${env(s)} \t\t; $s" | 
|     85   case Aop("+", a1, a2) =>  |    136   case Aop(op, a1, a2) =>  | 
|     86     compile_aexp(a1, env) ++  |    137     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ compile_op(op) | 
|     87     compile_aexp(a2, env) ++ List("iadd\n") |    138   case Ref(s, a) => | 
|     88   case Aop("-", a1, a2) =>  |    139     i"aload ${env(s)}" ++ compile_aexp(a, env) ++  i"iaload" | 
|     89     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ List("isub\n") |         | 
|     90   case Aop("*", a1, a2) =>  |         | 
|     91     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ List("imul\n") |         | 
|     92   case Ref(s, a1) =>  |         | 
|     93     List("aload " + env(s) + "\n") ++ compile_aexp(a1, env) ++ List("iaload \n") |         | 
|     94 } |    140 } | 
|     95  |    141  | 
|     96 // boolean expression compilation |    142 // boolean expression compilation | 
|     97 def compile_bexp(b: BExp, env : Env, jmp: String) : Instrs = b match { |    143 def compile_bexp(b: BExp, env : Env, jmp: String) : String = b match { | 
|     98   case True => Nil |    144     case True => "" | 
|     99   case False => List("goto " + jmp + "\n") |    145   case False => i"goto $jmp" | 
|    100   case Bop("=", a1, a2) =>  |    146   case Bop("==", a1, a2) =>  | 
|    101     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++  |    147     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ i"if_icmpne $jmp" | 
|    102     List("if_icmpne " + jmp + "\n") |         | 
|    103   case Bop("!=", a1, a2) =>  |    148   case Bop("!=", a1, a2) =>  | 
|    104     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++  |    149     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ i"if_icmpeq $jmp" | 
|    105     List("if_icmpeq " + jmp + "\n") |         | 
|    106   case Bop("<", a1, a2) =>  |    150   case Bop("<", a1, a2) =>  | 
|    107     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++  |    151     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ i"if_icmpge $jmp" | 
|    108     List("if_icmpge " + jmp + "\n") |         | 
|    109 } |    152 } | 
|    110  |    153  | 
|    111 // statement compilation |    154 // statement compilation | 
|    112 def compile_stmt(s: Stmt, env: Env) : (Instrs, Env) = s match { |    155 def compile_stmt(s: Stmt, env: Env) : (String, Env) = s match { | 
|    113   case Skip => (Nil, env) |    156   case Skip => ("", env) | 
|    114   case Assign(x, a) => { |    157   case Assign(x, a) => { | 
|    115     val index = if (env.isDefinedAt(x)) env(x) else  |    158      val index = env.getOrElse(x, env.keys.size) | 
|    116                     env.keys.size.toString |    159     (compile_aexp(a, env) ++ i"istore $index \t\t; $x", env + (x -> index))  | 
|    117     (compile_aexp(a, env) ++  |         | 
|    118      List("istore " + index + "\n"), env + (x -> index)) |         | 
|    119   }  |    160   }  | 
|    120   case If(b, bl1, bl2) => { |    161   case If(b, bl1, bl2) => { | 
|    121     val if_else = Fresh("If_else") |    162     val if_else = Fresh("If_else") | 
|    122     val if_end = Fresh("If_end") |    163     val if_end = Fresh("If_end") | 
|    123     val (instrs1, env1) = compile_block(bl1, env) |    164     val (instrs1, env1) = compile_block(bl1, env) | 
|    124     val (instrs2, env2) = compile_block(bl2, env1) |    165     val (instrs2, env2) = compile_block(bl2, env1) | 
|    125     (compile_bexp(b, env, if_else) ++ |    166     (compile_bexp(b, env, if_else) ++ | 
|    126      instrs1 ++ |    167      instrs1 ++ | 
|    127      List("goto " + if_end + "\n") ++ |    168      i"goto $if_end" ++ | 
|    128      List("\n" + if_else + ":\n\n") ++ |    169      l"$if_else" ++ | 
|    129      instrs2 ++ |    170      instrs2 ++ | 
|    130      List("\n" + if_end + ":\n\n"), env2) |    171      l"$if_end", env2) | 
|    131   } |    172   } | 
|    132   case While(b, bl) => { |    173   case While(b, bl) => { | 
|    133     val loop_begin = Fresh("Loop_begin") |    174     val loop_begin = Fresh("Loop_begin") | 
|    134     val loop_end = Fresh("Loop_end") |    175     val loop_end = Fresh("Loop_end") | 
|    135     val (instrs1, env1) = compile_block(bl, env) |    176     val (instrs1, env1) = compile_block(bl, env) | 
|    136     (List("\n" + loop_begin + ":\n\n") ++ |    177     (l"$loop_begin" ++ | 
|    137      compile_bexp(b, env, loop_end) ++ |    178      compile_bexp(b, env, loop_end) ++ | 
|    138      instrs1 ++ |    179      instrs1 ++ | 
|    139      List("goto " + loop_begin + "\n") ++ |    180      i"goto $loop_begin" ++ | 
|    140      List("\n" + loop_end + ":\n\n"), env1) |    181      l"$loop_end", env1) | 
|    141   } |    182   } | 
|    142   case Write(x) =>  |    183   case Write(x) =>  | 
|    143     (List("iload " + env(x) + "\n" +  |    184     (i"iload ${env(x)} \t\t; $x" ++  | 
|    144            "invokestatic XXX/XXX/write(I)V\n"), env) |    185      i"invokestatic XXX/XXX/write(I)V", env) | 
|    145   case Array(s, n) => { |    186   case Read(x) => { | 
|    146     val index = if (env.isDefinedAt(s)) throw new Exception("Array already defined") else  |    187     val index = env.getOrElse(x, env.keys.size)  | 
|    147                     env.keys.size.toString |    188     (i"invokestatic XXX/XXX/read()I" ++  | 
|    148     (List("ldc " ++ n.toString ++ "\n", |    189      i"istore $index \t\t; $x", env + (x -> index)) | 
|    149           "newarray int \n", |    190   } | 
|    150           "astore " ++ index ++ "\n"), env + (s -> index)) |    191   case Array(s: String, n: Int) => { | 
|    151   }  |    192     val index = if (env.isDefinedAt(s)) throw new Exception("array def error") else  | 
|         |    193                     env.keys.size | 
|         |    194     (i"ldc $n" ++ | 
|         |    195      i"newarray int" ++ | 
|         |    196      i"astore $index", env + (s -> index)) | 
|         |    197   } | 
|    152   case AssignA(s, a1, a2) => { |    198   case AssignA(s, a1, a2) => { | 
|    153     val index = if (env.isDefinedAt(s)) env(s) else  |    199     val index = if (env.isDefinedAt(s)) env(s) else  | 
|    154                     throw new Exception("Array not yet defined") |    200                     throw new Exception("array not defined") | 
|    155     (List("aload " + index + "\n") ++ |    201     (i"aload ${env(s)}" ++ | 
|    156      compile_aexp(a1, env) ++ |    202      compile_aexp(a1, env) ++ | 
|    157      compile_aexp(a2, env) ++ |    203      compile_aexp(a2, env) ++ | 
|    158      List("iastore \n"), env) |    204      i"iastore", env) | 
|    159   }  |    205   }  | 
|    160 } |    206 } | 
|    161  |    207  | 
|    162 // compilation of a block (i.e. list of instructions) |    208 // compilation of a block (i.e. list of instructions) | 
|    163 def compile_block(bl: Block, env: Env) : (Instrs, Env) = bl match { |    209 def compile_block(bl: Block, env: Env) : (String, Env) = bl match { | 
|    164   case Nil => (Nil, env) |    210   case Nil => ("", env) | 
|    165   case s::bl => { |    211   case s::bl => { | 
|    166     val (instrs1, env1) = compile_stmt(s, env) |    212     val (instrs1, env1) = compile_stmt(s, env) | 
|    167     val (instrs2, env2) = compile_block(bl, env1) |    213     val (instrs2, env2) = compile_block(bl, env1) | 
|    168     (instrs1 ++ instrs2, env2) |    214     (instrs1 ++ instrs2, env2) | 
|    169   } |    215   } | 
|    170 } |    216 } | 
|    171  |    217  | 
|         |    218  | 
|    172 // main compilation function for blocks |    219 // main compilation function for blocks | 
|    173 def compile(bl: Block, class_name: String) : String = { |    220 def compile(bl: Block, class_name: String) : String = { | 
|    174   val instructions = compile_block(bl, Map.empty)._1 |    221   val instructions = compile_block(bl, Map.empty)._1 | 
|    175   (beginning ++ instructions.mkString ++ ending).replaceAllLiterally("XXX", class_name) |    222   (beginning ++ instructions.mkString ++ ending).replaceAllLiterally("XXX", class_name) | 
|    176 } |    223 } | 
|    177  |    224  | 
|    178  |    225  | 
|    179 // compiling and running files |         | 
|    180 // |         | 
|    181 // JVM files can be assembled with  |         | 
|    182 // |         | 
|    183 //    java -jar jvm/jasmin-2.4/jasmin.jar fib.j |         | 
|    184 // |         | 
|    185 // and started with |         | 
|    186 // |         | 
|    187 //    java fib/fib |         | 
|    188  |         | 
|    189  |         | 
|    190  |         | 
|    191 import scala.util._ |         | 
|    192 import scala.sys.process._ |         | 
|    193 import scala.io |         | 
|    194  |         | 
|    195 def compile_tofile(bl: Block, class_name: String) = { |         | 
|    196   val output = compile(bl, class_name) |         | 
|    197   val fw = new java.io.FileWriter(class_name + ".j")  |         | 
|    198   fw.write(output)  |         | 
|    199   fw.close() |         | 
|    200 } |         | 
|    201  |         | 
|    202 def compile_all(bl: Block, class_name: String) : Unit = { |         | 
|    203   compile_tofile(bl, class_name) |         | 
|    204   println("compiled ") |         | 
|    205   val test = ("java -jar jvm/jasmin-2.4/jasmin.jar " + class_name + ".j").!! |         | 
|    206   println("assembled ") |         | 
|    207 } |         | 
|    208  |         | 
|    209 def time_needed[T](i: Int, code: => T) = { |         | 
|    210   val start = System.nanoTime() |         | 
|    211   for (j <- 1 to i) code |         | 
|    212   val end = System.nanoTime() |         | 
|    213   (end - start)/(i * 1.0e9) |         | 
|    214 } |         | 
|    215  |         | 
|    216  |         | 
|    217 def compile_run(bl: Block, class_name: String) : Unit = { |         | 
|    218   println("Start compilation") |         | 
|    219   compile_all(bl, class_name) |         | 
|    220   println("Time: " + time_needed(1, ("java " + class_name + "/" + class_name).!)) |         | 
|    221 } |         | 
|    222  |         | 
|    223  |         | 
|    224 // Fibonacci numbers as a test-case |    226 // Fibonacci numbers as a test-case | 
|    225 val fib_test =  |    227 val fib_test =  | 
|    226   List(Assign("n", Num(10)),            //  n := 10;                      |    228   List(Read("n"),                       //  read n;                      | 
|    227        Assign("minus1",Num(0)),         //  minus1 := 0; |    229        Assign("minus1",Num(0)),         //  minus1 := 0; | 
|    228        Assign("minus2",Num(1)),         //  minus2 := 1; |    230        Assign("minus2",Num(1)),         //  minus2 := 1; | 
|    229        Assign("temp",Num(0)),           //  temp := 0; |    231        Assign("temp",Num(0)),           //  temp := 0; | 
|    230        While(Bop("<",Num(0),Var("n")),  //  while n > 0 do  { |    232        While(Bop("<",Num(0),Var("n")),  //  while n > 0 do  { | 
|    231           List(Assign("temp",Var("minus2")),    //  temp := minus2; |    233           List(Assign("temp",Var("minus2")),    //  temp := minus2; | 
|    233                                         //  minus2 := minus1 + minus2; |    235                                         //  minus2 := minus1 + minus2; | 
|    234                Assign("minus1",Var("temp")), //  minus1 := temp; |    236                Assign("minus1",Var("temp")), //  minus1 := temp; | 
|    235                Assign("n",Aop("-",Var("n"),Num(1))))), //  n := n - 1 }; |    237                Assign("n",Aop("-",Var("n"),Num(1))))), //  n := n - 1 }; | 
|    236        Write("minus1"))                 //  write minus1 |    238        Write("minus1"))                 //  write minus1 | 
|    237  |    239  | 
|    238  |    240 // prints out the JVM-assembly program | 
|    239 compile_run(fib_test, "fib") |    241  | 
|         |    242 // println(compile(fib_test, "fib")) | 
|         |    243  | 
|         |    244 // can be assembled with  | 
|         |    245 // | 
|         |    246 //    java -jar jvm/jasmin-2.4/jasmin.jar fib.j | 
|         |    247 // | 
|         |    248 // and started with | 
|         |    249 // | 
|         |    250 //    java fib/fib | 
|         |    251  | 
|         |    252 import scala.util._ | 
|         |    253 import scala.sys.process._ | 
|         |    254 import scala.io | 
|         |    255  | 
|         |    256 def compile_tofile(bl: Block, class_name: String) = { | 
|         |    257   val output = compile(bl, class_name) | 
|         |    258   val fw = new java.io.FileWriter(class_name + ".j")  | 
|         |    259   fw.write(output)  | 
|         |    260   fw.close() | 
|         |    261 } | 
|         |    262  | 
|         |    263 def compile_all(bl: Block, class_name: String) : Unit = { | 
|         |    264   compile_tofile(bl, class_name) | 
|         |    265   println("compiled ") | 
|         |    266   val test = ("java -jar jvm/jasmin-2.4/jasmin.jar " + class_name + ".j").!! | 
|         |    267   println("assembled ") | 
|         |    268 } | 
|         |    269  | 
|         |    270 def time_needed[T](i: Int, code: => T) = { | 
|         |    271   val start = System.nanoTime() | 
|         |    272   for (j <- 1 to i) code | 
|         |    273   val end = System.nanoTime() | 
|         |    274   (end - start)/(i * 1.0e9) | 
|         |    275 } | 
|         |    276  | 
|         |    277  | 
|         |    278 def compile_run(bl: Block, class_name: String) : Unit = { | 
|         |    279   println("Start compilation") | 
|         |    280   compile_all(bl, class_name) | 
|         |    281   println("Time: " + time_needed(1, ("java " + class_name + "/" + class_name).!)) | 
|         |    282 } | 
|         |    283  | 
|    240  |    284  | 
|    241  |    285  | 
|    242 val arr_test =  |    286 val arr_test =  | 
|    243   List(Array("a", 10),                 // a[10] |    287   List(Array("a", 10), | 
|    244        Array("b", 2),                  // b[2] |    288        Array("b", 2), | 
|    245        AssignA("a", Num(0), Num(10)),  // a[0] := 10 |    289        AssignA("a", Num(0), Num(10)), | 
|    246        Assign("x", Ref("a", Num(0))),  // x := a[0] |    290        Assign("x", Ref("a", Num(0))), | 
|    247        Write("x"),                     // write x |    291        Write("x"), | 
|    248        AssignA("b", Num(1), Num(5)),   // b[1] := 5 |    292        AssignA("b", Num(1), Num(5)), | 
|    249        Assign("x", Ref("b", Num(1))),  // x := b[1] |    293        Assign("x", Ref("b", Num(1))), | 
|    250        Write("x"))                     // write x |    294        Write("x"))        | 
|    251  |    295  | 
|    252 compile_run(arr_test, "a") |    296  | 
|    253  |    297 //compile_run(arr_test, "a") | 
|    254  |    298  | 
|    255 //==================== |    299 //==================== | 
|    256 // Parser Combinators |    300 // Parser Combinators | 
|    257 //==================== |    301 //==================== | 
|    258  |    302  | 
|    259 import scala.language.implicitConversions |    303 import scala.language.implicitConversions | 
|    260 import scala.language.reflectiveCalls |    304 import scala.language.reflectiveCalls | 
|    261  |    305  | 
|    262  |    306 type IsSeq[A] = A => Seq[_] | 
|    263 abstract class Parser[I <% Seq[_], T] { |    307  | 
|         |    308 abstract class Parser[I : IsSeq, T] { | 
|    264   def parse(ts: I): Set[(T, I)] |    309   def parse(ts: I): Set[(T, I)] | 
|    265  |    310  | 
|    266   def parse_all(ts: I) : Set[T] = |    311   def parse_all(ts: I) : Set[T] = | 
|    267     for ((head, tail) <- parse(ts); if (tail.isEmpty)) yield head |    312     for ((head, tail) <- parse(ts); if (tail.isEmpty)) yield head | 
|    268 } |    313 } | 
|    269  |    314  | 
|    270 class SeqParser[I <% Seq[_], T, S](p: => Parser[I, T], q: => Parser[I, S]) extends Parser[I, (T, S)] { |    315 class SeqParser[I : IsSeq, T, S](p: => Parser[I, T], q: => Parser[I, S]) extends Parser[I, (T, S)] { | 
|    271   def parse(sb: I) =  |    316   def parse(sb: I) =  | 
|    272     for ((head1, tail1) <- p.parse(sb);  |    317     for ((head1, tail1) <- p.parse(sb);  | 
|    273          (head2, tail2) <- q.parse(tail1)) yield ((head1, head2), tail2) |    318          (head2, tail2) <- q.parse(tail1)) yield ((head1, head2), tail2) | 
|    274 } |    319 } | 
|    275  |    320  | 
|    276 class AltParser[I <% Seq[_], T](p: => Parser[I, T], q: => Parser[I, T]) extends Parser[I, T] { |    321 class AltParser[I : IsSeq, T](p: => Parser[I, T], q: => Parser[I, T]) extends Parser[I, T] { | 
|    277   def parse(sb: I) = p.parse(sb) ++ q.parse(sb)    |    322   def parse(sb: I) = p.parse(sb) ++ q.parse(sb)    | 
|    278 } |    323 } | 
|    279  |    324  | 
|    280 class FunParser[I <% Seq[_], T, S](p: => Parser[I, T], f: T => S) extends Parser[I, S] { |    325 class FunParser[I : IsSeq, T, S](p: => Parser[I, T], f: T => S) extends Parser[I, S] { | 
|    281   def parse(sb: I) =  |    326   def parse(sb: I) =  | 
|    282     for ((head, tail) <- p.parse(sb)) yield (f(head), tail) |    327     for ((head, tail) <- p.parse(sb)) yield (f(head), tail) | 
|    283 } |    328 } | 
|    284  |    329  | 
|    285  |    330  | 
|    458 bf_run(bf1, "sier") |    512 bf_run(bf1, "sier") | 
|    459  |    513  | 
|    460 bf_run("""++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++ |    514 bf_run("""++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++ | 
|    461        ..+++.>>.<-.<.+++.------.--------.>>+.>++.""", "hello") |    515        ..+++.>>.<-.<.+++.------.--------.>>+.>++.""", "hello") | 
|    462  |    516  | 
|    463 bf_run("""+++++++++++ |    517  | 
|         |    518 val bf2 = """+++++++++++ | 
|    464       >+>>>>++++++++++++++++++++++++++++++++++++++++++++ |    519       >+>>>>++++++++++++++++++++++++++++++++++++++++++++ | 
|    465       >++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> |    520       >++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> | 
|    466       +<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- |    521       +<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- | 
|    467       <-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< |    522       <-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< | 
|    468       -]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] |    523       -]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] | 
|    469       >[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ |    524       >[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ | 
|    470       +++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ |    525       +++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ | 
|    471       ++++++++++++++++++++++++++++++++++++++++++++.[-]<< |    526       ++++++++++++++++++++++++++++++++++++++++++++.[-]<< | 
|    472       <<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< |    527       <<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< | 
|    473       [-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]""", "fibs") |    528       [-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]""" | 
|         |    529  | 
|         |    530 bf_run(bf2, "fibs") | 
|         |    531  | 
|         |    532  | 
|         |    533 bf_run("""      A mandelbrot set fractal viewer in brainf*** written by Erik Bosman | 
|         |    534 +++++++++++++[->++>>>+++++>++>+<<<<<<]>>>>>++++++>--->>>>>>>>>>+++++++++++++++[[ | 
|         |    535 >>>>>>>>>]+[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-]>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+ | 
|         |    536 <<<<<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>>+>>>>>>>>>>>>>>>>>>>>>>>>>> | 
|         |    537 >+<<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+[>>>>>>[>>>>>>>[-]>>]<<<<<<<<<[<<<<<<<<<]>> | 
|         |    538 >>>>>[-]+<<<<<<++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<+++++++[-[->>> | 
|         |    539 >>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[[-]>>>>>>[>>>>> | 
|         |    540 >>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>> | 
|         |    541 [>>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<< | 
|         |    542 <<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>+++++++++++++++[[ | 
|         |    543 >>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[ | 
|         |    544 >+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[ | 
|         |    545 -<<+>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<< | 
|         |    546 <<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<< | 
|         |    547 [>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>> | 
|         |    548 >>>>[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+ | 
|         |    549 <<<<<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>> | 
|         |    550 >>>>>>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<< | 
|         |    551 +>>>>>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<< | 
|         |    552 <]<+<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>> | 
|         |    553 >>>>>>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> | 
|         |    554 >>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<< | 
|         |    555 <<<]>>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<< | 
|         |    556 <<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[-> | 
|         |    557 >>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<< | 
|         |    558 <<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]<<<<<<<[->+>>>-<<<<]>>>>>>>>>+++++++++++++++++++ | 
|         |    559 +++++++>>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>[<<<<<<<+<[-<+>>>>+<<[-]]>[-<<[->+>>>- | 
|         |    560 <<<<]>>>]>>>>>>>>>>>>>[>>[-]>[-]>[-]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>>>>>>[>>>>> | 
|         |    561 [-<<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>[-<<<<<<<< | 
|         |    562 <+>>>>>>>>>]>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>>>]+>[- | 
|         |    563 ]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>>>>>>>>]<<< | 
|         |    564 <<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+>>]< | 
|         |    565 <[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[->>>> | 
|         |    566 >>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[-]<->>> | 
|         |    567 [-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[>>>>>>[-< | 
|         |    568 <<<<+>>>>>]<<<<<[->>>>>+<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>+>>>>>>>> | 
|         |    569 ]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+ | 
|         |    570 >>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> | 
|         |    571 [->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- | 
|         |    572 ]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> | 
|         |    573 [>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | 
|         |    574 ]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+> | 
|         |    575 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>++++++++ | 
|         |    576 +++++++[[>>>>>>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-<<<<<<<+ | 
|         |    577 >>>>>>>]<<<<<<<[->>>>>>>+<<<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[ | 
|         |    578 -]>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>>>]>[-<<<<<<[->>>>>+<++<<<<]>>>>>[-< | 
|         |    579 <<<<+>>>>>]<->+>]<[->+<]<<<<<[->>>>>+<<<<<]>>>>>>[-]<<<<<<+>>>>[-<<<<->>>>]+<<<< | 
|         |    580 [->>>>->>>>>[>>[-<<->>]+<<[->>->[-<<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-] | 
|         |    581 +>>>>>>[>>>>>>>>>]>+<]]+>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<<<<<<<<<<<[<<<<< | 
|         |    582 <<<<]>>>>[-]+>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<< | 
|         |    583 [<<<<<<<<<]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<< | 
|         |    584 <<<+<[>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<< | 
|         |    585 <<<<<+>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<< | 
|         |    586 <<<<<<<<<<]>>>>[-]<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+<]>>>>>>>>]<<< | 
|         |    587 <<<<<+<[>[->>>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>[->>>>+<<<<]>]<[->>>>-<<<<<<< | 
|         |    588 <<<<<<<+>>>>>>>>>>]<]>>[->>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>>+<<<< | 
|         |    589 ]<<<<<<<<<<<]>>>>>>+<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>>>>>>>>>]<<<<<<<<< | 
|         |    590 [>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<<<<<<< | 
|         |    591 +>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<<<<<<< | 
|         |    592 <<<<<]]>[-]>>[-]>[-]>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-< | 
|         |    593 <<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[ | 
|         |    594 [>>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+ | 
|         |    595 [>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->> | 
|         |    596 [-<<+>>]<<[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<< | 
|         |    597 <[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[ | 
|         |    598 >[-]<->>>[-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[ | 
|         |    599 >>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]> | 
|         |    600 >>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>[-]>>>>+++++++++++++++[[>>>>>>>>>]<<<<<<<<<-<<<<< | 
|         |    601 <<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<< | 
|         |    602 <<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[- | 
|         |    603 <<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>> | 
|         |    604 >>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>>> | 
|         |    605 [-<<<->>>]<<<[->>>+<<<]>>>>>>>>]<<<<<<<<+<[>[->+>[-<-<<<<<<<<<<+>>>>>>>>>>>>[-<< | 
|         |    606 +>>]<]>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<<<]>>[-<+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<]> | 
|         |    607 [-<<+>>]<<<<<<<<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>> | 
|         |    608 >>>>>>]<<<<<<<<+<[>[->+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>[-<+>]>]<[-<-<<<<<<<<<<+>>>> | 
|         |    609 >>>>>>>]<<]>>>[-<<+>[-<-<<<<<<<<<<+>>>>>>>>>>>]>]<[-<+>]<<<<<<<<<<<<]>>>>>+<<<<< | 
|         |    610 ]>>>>>>>>>[>>>[-]>[-]>[-]>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>>>[-<<<<< | 
|         |    611 <+>>>>>>]<<<<<<[->>>>>>+<<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>> | 
|         |    612 >]>>[-<<<<<<<[->>>>>+<++<<<<]>>>>>[-<<<<<+>>>>>]<->+>>]<<[->>+<<]<<<<<[->>>>>+<< | 
|         |    613 <<<]+>>>>[-<<<<->>>>]+<<<<[->>>>->>>>>[>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<< | 
|         |    614 <<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>[-<<->>]+<<[->>->[-<<<+>>>]< | 
|         |    615 <<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]< | 
|         |    616 <<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+ | 
|         |    617 <]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>[->>>+<<<]>]<[->>>- | 
|         |    618 <<<<<<<<<<<<<+>>>>>>>>>>]<]>>[->>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>+<<< | 
|         |    619 ]<<<<<<<<<<<]>>>>>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]]>>>>[-<<<<+> | 
|         |    620 >>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<<[->>>- | 
|         |    621 <<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<<]>[->>>+<<[ | 
|         |    622 ->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<<<<<<]]>>>>[-]<<<<]>>>>[-<<<<+>> | 
|         |    623 >>]<<<<[->>>>+>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>[>>>>>> | 
|         |    624 >>>]<<<<<<<<<[>[->>>>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<< | 
|         |    625 <<<<<+>>>>>>>>>>>]<<]>[->>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<< | 
|         |    626 <<<<]]>>>>>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>[-<<<<+ | 
|         |    627 >>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<+>>>>> | 
|         |    628 ]<<<<<[->>>>>+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> | 
|         |    629 >>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>> | 
|         |    630 >>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[-<<+ | 
|         |    631 >>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> | 
|         |    632 [->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- | 
|         |    633 ]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> | 
|         |    634 [>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<< | 
|         |    635 <<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>> | 
|         |    636 >>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<<+>>> | 
|         |    637 >>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+ | 
|         |    638 <<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>> | 
|         |    639 >>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>> | 
|         |    640 >]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<<<<<] | 
|         |    641 >>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<<<<<< | 
|         |    642 ]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[->>>+< | 
|         |    643 <<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]> | 
|         |    644 >>>>>>>]<<<<<<<<<[<<<<<<<<<]>>->>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>]<<+>>>>[-<<<< | 
|         |    645 ->>>>]+<<<<[->>>>-<<<<<<.>>]>>>>[-<<<<<<<.>>>>>>>]<<<[-]>[-]>[-]>[-]>[-]>[-]>>>[ | 
|         |    646 >[-]>[-]>[-]>[-]>[-]>[-]>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-]>>>>]<<<<<<<<< | 
|         |    647 [<<<<<<<<<]>+++++++++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+>>>>>>>>>+<<<<<<<< | 
|         |    648 <<<<<<[<<<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+[-]>>[>>>>>>>>>]<<<<< | 
|         |    649 <<<<[>>>>>>>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<[<<<<<<<<<]>>>>>>>[-]+>>>]<<<< | 
|         |    650 <<<<<<]]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+>>[>+>>>>[-<<<<->>>>]<<<<[->>> | 
|         |    651 >+<<<<]>>>>>>>>]<<+<<<<<<<[>>>>>[->>+<<]<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<< | 
|         |    652 <<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<<<<<<[->>>>>>+<<<<<<]< | 
|         |    653 +<<<<<<<<<]>>>>>>>-<<<<[-]+<<<]+>>>>>>>[-<<<<<<<->>>>>>>]+<<<<<<<[->>>>>>>->>[>> | 
|         |    654 >>>[->>+<<]>>>>]<<<<<<<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<< | 
|         |    655 <<<<[->>>>>>+<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+<<< | 
|         |    656 <<[<<<<<<<<<]>>>>>>>>>[>>>>>[-<<<<<->>>>>]+<<<<<[->>>>>->>[-<<<<<<<+>>>>>>>]<<<< | 
|         |    657 <<<[->>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>[-< | 
|         |    658 <<<<<<->>>>>>>]+<<<<<<<[->>>>>>>-<<[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<<<<<<<<<[<<< | 
|         |    659 <<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<< | 
|         |    660 <<[<<<<<<<<<]>>>>[-]<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>-<<<<<[<<<<<<< | 
|         |    661 <<]]>>>]<<<<.>>>>>>>>>>[>>>>>>[-]>>>]<<<<<<<<<[<<<<<<<<<]>++++++++++[-[->>>>>>>> | 
|         |    662 >+<<<<<<<<<]>>>>>>>>>]>>>>>+>>>>>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-<<<<<< | 
|         |    663 <<+>>>>>>>>]<<<<<<<<[->>>>>>>>+[-]>[>>>>>>>>>]<<<<<<<<<[>>>>>>>>[-<<<<<<<+>>>>>> | 
|         |    664 >]<<<<<<<[->>>>>>>+<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+>>]<<<<<<<<<<]]>>>>>>>>[-<<<<< | 
|         |    665 <<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+>[>+>>>>>[-<<<<<->>>>>]<<<<<[->>>>>+<<<<<]>>>>>> | 
|         |    666 >>]<+<<<<<<<<[>>>>>>[->>+<<]<<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[-]<- | 
|         |    667 >>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<<<<<<<[->>>>>>>+<<<<<<<]<+<<<<<< | 
|         |    668 <<<]>>>>>>>>-<<<<<[-]+<<<]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>>->[>>> | 
|         |    669 >>>[->>+<<]>>>]<<<<<<<<<[>[-]<->>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<< | 
|         |    670 <<<<<[->>>>>>>+<<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>> | 
|         |    671 +>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<<->>>>>>]+< | 
|         |    672 <<<<<[->>>>>>->>[-<<<<<<<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+<<<<<<<<<<<<<<<<<[<<<<<<< | 
|         |    673 <<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>> | 
|         |    674 -<<[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>> | 
|         |    675 >>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>[-]<<<++++ | 
|         |    676 +[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<< | 
|         |    677 <<<<<]]>>>]""", "mand") | 
|         |    678  |