X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fscala%2FSBP.scala;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fscala%2FSBP.scala;h=c231646200b98b16a940321d61c6eaa1cbbdd06d;hp=0000000000000000000000000000000000000000;hb=f8303d6b2e11b97707d8b63aa80a2b814e145693;hpb=dce3af8d6974a6c5b05955703de2e983f112b765 diff --git a/src/edu/berkeley/sbp/scala/SBP.scala b/src/edu/berkeley/sbp/scala/SBP.scala new file mode 100644 index 0000000..c231646 --- /dev/null +++ b/src/edu/berkeley/sbp/scala/SBP.scala @@ -0,0 +1,36 @@ +package edu.berkeley.sbp.scala + +class Location(val row:Int, val col:Int) { +} + +class Region(val start:Location, val end:Location) { +} + +case class Tree(val label:String, val children:IndexedSeq[Tree] /*, val region:Region*/) { + + def childrenFlat : Boolean = + children.map((t:Tree) => children.length == 0).foldLeft(true)(_ && _) + + def coalesceFlatHeadlessNodes : Tree = + if (label.equals("") && childrenFlat) + new Tree(children.map((t:Tree) => t.label).foldLeft("")(_ + _), Tree.emptyChildren) + else + new Tree(label, (children.map((t:Tree) => t.coalesceFlatHeadlessNodes))) +} + +object Tree { + val emptyChildren = IndexedSeq[Tree]() +} + +object SBP { + + def mkTree(t:edu.berkeley.sbp.Tree[String]) : Tree = { + val children = scala.collection.immutable.IndexedSeq[Tree]( + (for(i <- 0 until t.size()) + yield mkTree(t.child(i))) + : _* + ) + return new Tree(t.getHead.toString, children) + } + +}