c231646200b98b16a940321d61c6eaa1cbbdd06d
[sbp.git] / src / edu / berkeley / sbp / scala / SBP.scala
1 package edu.berkeley.sbp.scala
2
3 class Location(val row:Int, val col:Int) {
4 }
5
6 class Region(val start:Location, val end:Location) {
7 }
8
9 case class Tree(val label:String, val children:IndexedSeq[Tree] /*, val region:Region*/) {
10
11   def childrenFlat : Boolean =
12     children.map((t:Tree) => children.length == 0).foldLeft(true)(_ && _)
13
14   def coalesceFlatHeadlessNodes : Tree =
15    if (label.equals("") && childrenFlat)
16       new Tree(children.map((t:Tree) => t.label).foldLeft("")(_ + _), Tree.emptyChildren)
17    else
18       new Tree(label, (children.map((t:Tree) => t.coalesceFlatHeadlessNodes)))
19 }
20
21 object Tree {
22   val emptyChildren = IndexedSeq[Tree]()
23 }
24
25 object SBP {
26
27   def mkTree(t:edu.berkeley.sbp.Tree[String]) : Tree = {
28     val children = scala.collection.immutable.IndexedSeq[Tree](
29       (for(i <- 0 until t.size())
30         yield mkTree(t.child(i)))
31       : _*
32     )
33     return new Tree(t.getHead.toString, children)
34   }
35
36 }