1 package edu.berkeley.sbp.scala
2 import edu.berkeley.sbp.Input.Location
3 import edu.berkeley.sbp.Input.Region
5 case class Tree(val label:String, val children:IndexedSeq[Tree], val region:Option[Region[_]]) {
7 def childrenFlat : Boolean =
8 children.map((t:Tree) => children.length == 0).foldLeft(true)(_ && _)
10 def coalesceFlatHeadlessNodes : Tree =
11 if (label.equals("") && childrenFlat)
12 new Tree(children.map((t:Tree) => t.label).foldLeft("")(_ + _), Tree.emptyChildren, region)
14 new Tree(label, (children.map((t:Tree) => t.coalesceFlatHeadlessNodes)), region)
18 val emptyChildren = IndexedSeq[Tree]()
23 def mkTree(t:edu.berkeley.sbp.Tree[String]) : Tree = {
24 val children = scala.collection.immutable.IndexedSeq[Tree](
25 (for(i <- 0 until t.size())
26 yield mkTree(t.child(i)))
29 val region = t.getRegion
30 return new Tree(t.getHead.toString, children, if (region==null) None else Some(region))