From f8303d6b2e11b97707d8b63aa80a2b814e145693 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Fri, 21 Jan 2011 22:13:09 -0800 Subject: [PATCH 1/1] add Scala support --- Makefile | 7 +++++-- src/edu/berkeley/sbp/haskell/SBP.lhs | 2 ++ src/edu/berkeley/sbp/scala/SBP.scala | 36 ++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/edu/berkeley/sbp/scala/SBP.scala 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) + } + +} -- 1.7.10.4