add Scala support
authorAdam Megacz <megacz@cs.berkeley.edu>
Sat, 22 Jan 2011 06:13:09 +0000 (22:13 -0800)
committerAdam Megacz <megacz@cs.berkeley.edu>
Sat, 22 Jan 2011 06:13:09 +0000 (22:13 -0800)
Makefile
src/edu/berkeley/sbp/haskell/SBP.lhs
src/edu/berkeley/sbp/scala/SBP.scala [new file with mode: 0644]

index a5d9260..2f10cae 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -63,12 +63,15 @@ boot: edu.berkeley.sbp.jar
                ../src/edu/berkeley/sbp/meta/meta.g \
                edu.berkeley.sbp.meta.MetaGrammar
 
-edu.berkeley.sbp.jar: $(shell find src -name \*.java)
+edu.berkeley.sbp.jar: $(shell find src -name \*.java -or -name \*.scala)
+       rm -rf bin
        mkdir -p bin
-       javac  -cp javax.servlet.jar -d bin -sourcepath src $^
+       javac  -cp javax.servlet.jar -d bin -sourcepath src `find src -name \*.java`
+       scalac -d bin -sourcepath src `find src -name \*.scala`
        echo 'Main-Class: edu.berkeley.sbp.misc.CommandLine' > bin/manifest
        cd bin; jar cmf manifest ../$@ .
 #-Xlint:unchecked
+
 javadoc:
        rm -rf doc/api
        mkdir -p doc/api
index 4cc3d26..8af5844 100644 (file)
@@ -3,6 +3,8 @@
 -- These bindings are highly experimental and subject to change
 -- without notice.  You've been warned.
 --
+-- Warning: this is no longer maintained.  It stopped working in mid-2009.
+--
 module Edu_Berkeley_Sbp_Haskell_SBP(
   Tree(Tree),Location(Location),Region(Region),parseFile,prettyPrintTree,coalesceFlatHeadlessNodes)
 where
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)
+  }
+
+}