exps/Spiral.scala
changeset 310 c090baa7059d
parent 309 a7769a89c529
child 311 8b8db9558ecf
--- a/exps/Spiral.scala	Mon Feb 11 23:17:52 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-import Element.elem
-import RexpRelated._
-import RexpRelated.Rexp._
-object Spiral{
-
-  val space = elem(" ")
-  val corner = elem("+")
-
-  def spiral(nEdges: Int, direction: Int): Element = {
-    if(nEdges == 1)
-      elem("+")
-    else {
-      val sp = spiral(nEdges - 1, (direction + 3) % 4)
-      def verticalBar = elem('|', 1, sp.height)
-      def horizontalBar = elem('-', sp.width, 1)
-      if(direction == 0)
-        (corner beside horizontalBar) above sp//(sp beside space)
-      else if (direction == 1)
-        sp beside (corner above verticalBar)
-      else if (direction == 2)
-        (space beside sp) above (horizontalBar beside corner)
-      else
-        (verticalBar above corner) beside (space above sp)
-    }
-  }
-  val alphabet = ("""abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:"=()\;-+*!<>\/%{} """+"\n\t").toSet//Set('a','b','c')
-  def regx_tree(r: ARexp): Element = {
-    r match {
-      case APRED(bs, f) => {
-        val Some(d) = alphabet.find(f)
-        d match {
-          case '\n' => elem("\\n")
-          case '\t' => elem("\\t")
-          case ' ' => elem("space")
-          case d => elem(d.toString)
-        }   
-      }
-      case AONE(bs) => {
-        elem("ONE")
-      }
-      case AZERO => {
-        elem("ZERO")
-      }
-      case ASEQ(bs, r1, r2) => {
-        binary_print("SEQ", r1, r2)
-      }
-      case AALTS(bs, rs) => {
-        //elem("Awaiting completion")
-        list_print("ALT", rs)
-      }
-      case ASTAR(bs, r) => {
-        list_print("STA", List(r))
-      }
-    }
-  }
-  val port = elem(" └-")
-  def list_print(name: String, rs: List[ARexp]): Element = {
-    rs match {
-      case r::Nil => {
-        val pref = regx_tree(r)
-        val head = elem(name)
-        (head left_align (port up_align pref) ) 
-      }
-      case r2::r1::Nil => {
-        binary_print(name, r2, r1)
-      }
-      case r::rs1 => {
-        val pref = regx_tree(r)
-        val head = elem(name)
-        if (pref.height > 1){
-          val link = elem('|', 1, pref.height - 1)
-          (head left_align ((port above link) beside pref)) left_align tail_print(rs1)    
-        }
-        else{
-          (head left_align (port beside pref) ) left_align tail_print(rs1)
-        }
-      }
-    }
-  }
-  def tail_print(rs: List[ARexp]): Element = {
-
-    rs match {
-      case r2::r1::Nil => {
-        val pref = regx_tree(r2)
-        val suff = regx_tree(r1)
-        if (pref.height > 1){
-          val link = elem('|', 1, pref.height - 1)
-          ((port above link) beside pref) left_align (port up_align suff)
-        }
-        else{
-          (port beside pref) left_align (port up_align suff)
-        } 
-      }
-      case r2::rs1 => {
-        val pref = regx_tree(r2)
-        
-        if (pref.height > 1){
-          val link = elem('|', 1, pref.height - 1)
-          ((port above link) beside pref) left_align tail_print(rs1)//(port up_align tail_print(rs1) )
-        }
-        else{
-          (port beside pref) left_align tail_print(rs1)//(port up_align tail_print(rs1))
-        } 
-        //pref left_align tail_print(rs1)
-      }
-    }
-  }
-
-  def binary_print(name: String, r1: ARexp, r2: ARexp): Element = {
-    val pref = regx_tree(r1)
-    val suff = regx_tree(r2)
-    val head = elem(name)
-    if (pref.height > 1){
-      val link = elem('|', 1, pref.height - 1)
-      (head left_align ((port above link) beside pref) ) left_align (port up_align suff)
-    }
-    else{
-      (head left_align (port beside pref) ) left_align (port up_align suff)
-    }
-  }
-  def illustration(r: Rexp, s: String){
-    var i_like_imperative_style = internalise(r)
-    val all_chars = s.toList
-    for (i <- 0 to s.length - 1){
-      val der_res =  bder(all_chars(i), i_like_imperative_style)
-      val simp_res = bsimp(der_res)
-      println("The three regxes are the original regex, the regex after derivative w.r.t " + all_chars(i) + " and the simplification of the derivative.")
-      //println(regx_tree(i_like_imperative_style) up_align regx_tree(der_res) up_align regx_tree(simp_res))
-      println(asize(i_like_imperative_style), asize(der_res), asize(simp_res))
-      i_like_imperative_style = simp_res
-    }
-  }
-  val ran = scala.util.Random
-  var alphabet_size = 3
-  def balanced_seq_star_gen(depth: Int, star: Boolean): Rexp = {
-    if(depth == 1){
-      ((ran.nextInt(6) + 97).toChar).toString
-    }
-    else if(star){
-      STAR(balanced_seq_star_gen(depth - 1, false))
-    }
-    else{
-      SEQ(balanced_seq_star_gen(depth - 1, true), balanced_seq_star_gen(depth - 1, true))
-    }
-  }
-  def random_struct_gen(depth:Int): Rexp = {
-    val dice = ran.nextInt(3)
-    (dice, depth) match {
-      case (_, 0) => ((ran.nextInt(alphabet_size) + 97).toChar).toString
-      case (0, i) => STAR(random_struct_gen(i - 1))
-      case (1, i) => SEQ(random_struct_gen(i - 1), random_struct_gen(i - 1))
-      case (2, i) => ALTS( List(random_struct_gen(i - 1), random_struct_gen(i - 1)) )
-    }
-  }
-  def rd_string_gen(alp_size: Int, len: Int): String = {
-    ((ran.nextInt(alp_size) + 97).toChar).toString + rd_string_gen(alp_size, len - 1)
-  }
-  //def stay_same_hpth(r: Rexp, )
-  def main(args: Array[String]) {
-    val depth = args(0).toInt
-    alphabet_size = args(1).toInt
-    //illustration(random_struct_gen(depth), rd_string_gen(alphabet_size, 20))//"abcabadaaadcabdbabcdaadbabbcbbdabdabbcbdbabdbcdb")
-    for( i <- 50 to 400 by 20){
-      println(i+" iterations of prog2:")
-      blexing_simp(AWHILE_REGS, prog2 * i)
-    }
-      
-  } 
-}
\ No newline at end of file