equal
  deleted
  inserted
  replaced
  
    
    
|     14 //       * the resulting Java program takes about 20 secs  |     14 //       * the resulting Java program takes about 20 secs  | 
|     15 // |     15 // | 
|     16 // |     16 // | 
|     17 // Call with scala-cli: |     17 // Call with scala-cli: | 
|     18 // |     18 // | 
|     19 //  scala-cli --dep com.lihaoyi::fastparse:3.0.2  compile_bfc.sc  |     19 //  scala-cli --dep com.lihaoyi::fastparse:3.1.1  compile_bfc.sc  | 
|     20 // |     20 // | 
|     21 // Scala-cli is another REPL for scala. Unfortunately |     21 // Scala-cli is another REPL for scala. Unfortunately | 
|     22 // fastparse used in this file is not yet supported |     22 // fastparse used in this file is not yet supported | 
|     23 // under ammonite. |     23 // under ammonite. | 
|     24  |     24  | 
|     25 // compile_arrays.sc (no peephole optimisations) |     25 // compile_arrays.sc (no peephole optimisations) | 
|     26 // compile_arrays2.sc (peephole optimisations applied) |     26 // compile_arrays2.sc (peephole optimisations applied) | 
|     27  |     27  | 
|     28 //> using file compile_arrays2.sc |     28 //> using file compile_arrays.sc | 
|     29 import compile_arrays2._ |     29 import compile_arrays.* | 
|     30  |     30  | 
|     31 def time_needed[T](i: Int, code: => T) = { |     31 def time_needed[T](i: Int, code: => T) = { | 
|     32   val start = System.nanoTime() |     32   val start = System.nanoTime() | 
|     33   for (j <- 2 to i) code |     33   for (j <- 2 to i) code | 
|     34   val result = code |     34   val result = code | 
|     66   val instructions = compile_block(bl, Map())._1 |     66   val instructions = compile_block(bl, Map())._1 | 
|     67   (beginning ++ instructions ++ ending).replace("XXX", class_name) |     67   (beginning ++ instructions ++ ending).replace("XXX", class_name) | 
|     68 } |     68 } | 
|     69  |     69  | 
|     70 // post 2.5.0 ammonite |     70 // post 2.5.0 ammonite | 
|     71 import os._ |     71 import os.* | 
|     72  |     72  | 
|     73  |     73  | 
|     74 def compile_to_file(bl: Block, class_name: String) : Unit =  |     74 def compile_to_file(bl: Block, class_name: String) : Unit =  | 
|     75   os.write.over(os.pwd / s"$class_name.j", compile(bl, class_name))   |     75   os.write.over(os.pwd / s"$class_name.j", compile(bl, class_name))   | 
|     76  |     76  | 
|     90  |     90  | 
|     91 //===================================== |     91 //===================================== | 
|     92 // Grammar Rules for WHILE with arrays |     92 // Grammar Rules for WHILE with arrays | 
|     93 //===================================== |     93 //===================================== | 
|     94  |     94  | 
|     95 //> using dep com.lihaoyi::fastparse:3.0.2 |     95 //> using dep com.lihaoyi::fastparse:3.1.1 | 
|     96  |     96  | 
|     97 import fastparse._ |     97 import fastparse.* | 
|     98 import MultiLineWhitespace._ |     98 import MultiLineWhitespace.* | 
|     99  |     99  | 
|    100 def lowercase [$ : P] = P( CharIn("a-z") ) |    100 def lowercase [$ : P] = P( CharIn("a-z") ) | 
|    101 def uppercase[$ : P]  = P( CharIn("A-Z") ) |    101 def uppercase[$ : P]  = P( CharIn("A-Z") ) | 
|    102 def letter[$ : P]     = P( lowercase | uppercase ) |    102 def letter[$ : P]     = P( lowercase | uppercase ) | 
|    103 def digit [$ : P]     = P( CharIn("0-9") ) |    103 def digit [$ : P]     = P( CharIn("0-9") ) | 
|    247 def bf_run(prog: String, name: String) = { |    247 def bf_run(prog: String, name: String) = { | 
|    248   println(s"BF pre-processing of $name") |    248   println(s"BF pre-processing of $name") | 
|    249   val bf_string = bf_str(prog) |    249   val bf_string = bf_str(prog) | 
|    250   println(s"BF parsing (program length ${bf_string.length} characters)") |    250   println(s"BF parsing (program length ${bf_string.length} characters)") | 
|    251   val (time, bf_prog) =  |    251   val (time, bf_prog) =  | 
|    252     time_needed(1, fastparse.parse(bf_string, Stmts(_)).get.value) |    252     time_needed(1, fastparse.parse(bf_string, implicit p  => Stmts).get.value) | 
|    253   println(s"BF generated WHILE program (needed $time secs for parsing)") |    253   println(s"BF generated WHILE program (needed $time secs for parsing)") | 
|    254   compile_and_run(bf_prog, name) |    254   compile_and_run(bf_prog, name) | 
|    255 } |    255 } | 
|    256  |    256  | 
|    257 // a benchmark program (counts down from 'Z' to 'A') |    257 // a benchmark program (counts down from 'Z' to 'A') |