equal
  deleted
  inserted
  replaced
  
    
    
    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   | 
         | 
    26 //> using toolkit latest  | 
         | 
    27 //> using file compile_arrays2.sc  | 
    25 //> using file compile_arrays2.sc  | 
    28 import compile_arrays2._  | 
    26 import compile_arrays2._  | 
    29   | 
    27   | 
    30 def time_needed[T](i: Int, code: => T) = { | 
    28 def time_needed[T](i: Int, code: => T) = { | 
    31   val start = System.nanoTime()  | 
    29   val start = System.nanoTime()  | 
   118   P(  P(Fa ~ "*" ~ Te).map{ case (l, r) => Aop("*", l, r)}  | 
   116   P(  P(Fa ~ "*" ~ Te).map{ case (l, r) => Aop("*", l, r)}  | 
   119     | Fa )     | 
   117     | Fa )     | 
   120 def Fa[$ : P]: P[AExp] =   | 
   118 def Fa[$ : P]: P[AExp] =   | 
   121   P( "(" ~ AExp ~ ")"  | 
   119   P( "(" ~ AExp ~ ")"  | 
   122      | P (Ident ~ "[" ~ AExp ~ "]").map{Ref(_, _)} | 
   120      | P (Ident ~ "[" ~ AExp ~ "]").map{Ref(_, _)} | 
   123      | P(Number).map{Num}  | 
   121      | P(Number).map{Num(_)}  | 
   124      | P(Ident).map{Var} ) | 
   122      | P(Ident).map{Var(_)} ) | 
   125   | 
   123   | 
   126 // boolean expressions  | 
   124 // boolean expressions  | 
   127 def BExp[$ : P]: P[BExp] =   | 
   125 def BExp[$ : P]: P[BExp] =   | 
   128   P(  P(AExp ~ "=" ~ AExp).map{ case (x, z) => Bop("=", x, z)}  | 
   126   P(  P(AExp ~ "=" ~ AExp).map{ case (x, z) => Bop("=", x, z)}  | 
   129     | P(AExp ~ "!=" ~ AExp).map{ case (x, z) => Bop("!=", x, z)}   | 
   127     | P(AExp ~ "!=" ~ AExp).map{ case (x, z) => Bop("!=", x, z)}   | 
   139     | P(Ident ~ ":=" ~ AExp).map{Assign(_, _)}  | 
   137     | P(Ident ~ ":=" ~ AExp).map{Assign(_, _)}  | 
   140     | P(Ident ~ "[" ~ AExp ~ "]" ~ ":=" ~ AExp).map{AssignA(_, _, _)}  | 
   138     | P(Ident ~ "[" ~ AExp ~ "]" ~ ":=" ~ AExp).map{AssignA(_, _, _)}  | 
   141     | P("if" ~ BExp ~ "then" ~ Block ~ "else" ~ Block).map{If(_, _, _)}  | 
   139     | P("if" ~ BExp ~ "then" ~ Block ~ "else" ~ Block).map{If(_, _, _)}  | 
   142     | P("while" ~ BExp ~ "do" ~ Block).map{While(_, _)}  | 
   140     | P("while" ~ BExp ~ "do" ~ Block).map{While(_, _)}  | 
   143     | P("new(" ~ Ident ~ "[" ~ Number ~ "])").map{ArrayDef(_, _)}  | 
   141     | P("new(" ~ Ident ~ "[" ~ Number ~ "])").map{ArrayDef(_, _)}  | 
   144     | P("write(" ~ Ident ~ ")").map{Write} )  | 
   142     | P("write(" ~ Ident ~ ")").map{Write(_)} )  | 
   145   | 
   143   | 
   146 def Stmts[$ : P]: P[Block] =  | 
   144 def Stmts[$ : P]: P[Block] =  | 
   147   P(  P(Stmt ~ ";" ~ Stmts).map{ case (x, z) => x :: z }  | 
   145   P(  P(Stmt ~ ";" ~ Stmts).map{ case (x, z) => x :: z }  | 
   148     | P(Stmt).map{s => List(s)} )  | 
   146     | P(Stmt).map{s => List(s)} )  | 
   149   | 
   147   | 
   190   case '>' => "ptr := ptr + 1;"  | 
   188   case '>' => "ptr := ptr + 1;"  | 
   191   case '<' => "ptr := ptr - 1;"  | 
   189   case '<' => "ptr := ptr - 1;"  | 
   192   case '+' => "mem[ptr] := mem[ptr] + 1;"  | 
   190   case '+' => "mem[ptr] := mem[ptr] + 1;"  | 
   193   case '-' => "mem[ptr] := mem[ptr] - 1;"  | 
   191   case '-' => "mem[ptr] := mem[ptr] - 1;"  | 
   194   case '.' => "x := mem[ptr]; write x;"  | 
   192   case '.' => "x := mem[ptr]; write x;"  | 
   195   //case ',' => "XXX" // "ptr = getchar();\n"  | 
         | 
   196   case '['  => "while (mem[ptr] != 0) do {" | 
   193   case '['  => "while (mem[ptr] != 0) do {" | 
   197   case ']'  => "skip};"  | 
   194   case ']'  => "skip};"  | 
   198   case _ => ""  | 
   195   case _ => ""  | 
   199 }  | 
   196 }  | 
   200   | 
   197   | 
   320 //  | 
   317 //  | 
   321 //@doc(" All benchmarks.") | 
   318 //@doc(" All benchmarks.") | 
   322 //@main  | 
   319 //@main  | 
   323 def all() = { bfc0(); bfc1(); bfc2(); bfc3(); bfc4() }  | 
   320 def all() = { bfc0(); bfc1(); bfc2(); bfc3(); bfc4() }  | 
   324   | 
   321   | 
   325 all()  | 
   322 //all()  | 
   326   | 
   323 bfc4()  | 
   327   | 
   324   | 
   328   | 
   325   | 
   329   | 
   326   | 
   330   | 
   327   | 
   331 // old way to run it with Ammonite  | 
   328 // old way to run it with Ammonite  |