add Scala support
[sbp.git] / src / edu / berkeley / sbp / scala / SBP.scala
diff --git a/src/edu/berkeley/sbp/scala/SBP.scala b/src/edu/berkeley/sbp/scala/SBP.scala
new file mode 100644 (file)
index 0000000..c231646
--- /dev/null
@@ -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)
+  }
+
+}