246 println(s"BF generated WHILE program (needed $time secs for parsing)") |
246 println(s"BF generated WHILE program (needed $time secs for parsing)") |
247 compile_and_run(bf_prog, name) |
247 compile_and_run(bf_prog, name) |
248 } |
248 } |
249 |
249 |
250 // a benchmark program (counts down from 'Z' to 'A') |
250 // a benchmark program (counts down from 'Z' to 'A') |
251 @doc(" Benchmark 'Z' to 'A'.") |
251 //@doc(" Benchmark 'Z' to 'A'.") |
252 @main |
252 @main |
253 def bfc0() = bf_run(read(pwd / "benchmark.bf"), "bench") |
253 def bfc0() = bf_run(read(pwd / "benchmark.bf"), "bench") |
254 |
254 |
255 |
255 |
256 @doc(" Sierpinski triangle.") |
256 //@doc(" Sierpinski triangle.") |
257 @main |
257 @main |
258 def bfc1() = bf_run(read(pwd / "sierpinski.bf"), "sier") |
258 def bfc1() = bf_run(read(pwd / "sierpinski.bf"), "sier") |
259 |
259 |
260 // Hello World |
260 // Hello World |
261 val bf2 = """++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-] |
261 val bf2 = """++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-] |
262 >>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.""" |
262 >>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.""" |
263 |
263 |
264 @doc(" Hello world.") |
264 //@doc(" Hello world.") |
265 @main |
265 @main |
266 def bfc2() = bf_run(bf2, "hello") |
266 def bfc2() = bf_run(bf2, "hello") |
267 |
267 |
268 // Fibonacci |
268 // Fibonacci |
269 val bf3 = """+++++++++++ |
269 val bf3 = """+++++++++++ |
277 ++++++++++++++++++++++++++++++++++++++++++++.[-]<< |
277 ++++++++++++++++++++++++++++++++++++++++++++.[-]<< |
278 <<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< |
278 <<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< |
279 [-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] |
279 [-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] |
280 [-]++++++++++.""" |
280 [-]++++++++++.""" |
281 |
281 |
282 @doc(" Fibonacci numbers.") |
282 //@doc(" Fibonacci numbers.") |
283 @main |
283 @main |
284 def bfc3() = bf_run(bf3, "fibs") |
284 def bfc3() = bf_run(bf3, "fibs") |
285 |
285 |
286 // Mandelbrot Set |
286 // Mandelbrot Set |
287 //---------------- |
287 //---------------- |
288 // |
288 // |
289 // Note: Parsing of the generated WHILE program (around 60K in size) |
289 // Note: Parsing of the generated WHILE program (around 60K in size) |
290 // takes approximately 10 minutes to parse with our parser combinators, |
290 // takes approximately 10 minutes to parse with our parser combinators, |
291 // and approximately 30 seconds with Ammonite's fastparse. |
291 // and approximately 30 seconds with Ammonite's fastparse. |
292 |
292 |
293 @doc(" Mandelbrot set.") |
293 //@doc(" Mandelbrot set.") |
294 @main |
294 @main |
295 def bfc4() = bf_run(read(pwd / "mandelbrot.bf"), "mandelbrot") |
295 def bfc4() = bf_run(read(pwd / "mandelbrot.bf"), "mandelbrot") |
296 |
296 |
297 |
297 |
298 // this unfortunately hits the capacity of the JVM, even with optimisations |
298 // this unfortunately hits the capacity of the JVM, even with optimisations |
299 //@doc(" Coolatz serries up to 30.") |
299 //@doc(" Coolatz serries up to 30.") |
300 //@main |
300 //@main |
301 //def bfc5() = bf_run(read(pwd / "collatz.bf"), "coll") |
301 //def bfc5() = bf_run(read(pwd / "collatz.bf"), "coll") |
302 |
302 |
303 |
303 // this unfortunately hits the capacity of the JVM, even with optimisations |
304 // |
304 //@doc(" Towers of Hanoi.") |
305 @doc(" All benchmarks.") |
305 //@main |
|
306 //def bfc6() = bf_run(read(pwd / "hanoi.bf"), "hanoi") |
|
307 |
|
308 // |
|
309 //@doc(" All benchmarks.") |
306 @main |
310 @main |
307 def all() = { bfc0(); bfc1(); bfc2(); bfc3(); bfc4() } |
311 def all() = { bfc0(); bfc1(); bfc2(); bfc3(); bfc4() } |
308 |
312 |
309 |
313 |
310 |
314 |