From: Adam Megacz Date: Sat, 22 Jan 2011 06:13:09 +0000 (-0800) Subject: add Scala support X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=f8303d6b2e11b97707d8b63aa80a2b814e145693;hp=dce3af8d6974a6c5b05955703de2e983f112b765 add Scala support --- diff --git a/Makefile b/Makefile index a5d9260..2f10cae 100644 --- 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 diff --git a/src/edu/berkeley/sbp/haskell/SBP.lhs b/src/edu/berkeley/sbp/haskell/SBP.lhs index 4cc3d26..8af5844 100644 --- a/src/edu/berkeley/sbp/haskell/SBP.lhs +++ b/src/edu/berkeley/sbp/haskell/SBP.lhs @@ -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 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) + } + +}