From: adam Date: Fri, 21 Jul 2006 03:07:04 +0000 (-0400) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~106 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=f09d2abb95f106197aea99c345282c3bf0cd3717 checkpoint darcs-hash:20060721030704-5007d-2b29da867a864163d503edee66e6dff6a9a9d862.gz --- diff --git a/TODO b/TODO index cef631b..0c2d747 100644 --- a/TODO +++ b/TODO @@ -2,6 +2,8 @@ _____________________________________________________________________________ Immediately - Sequence shouldn't be an Element + - Should Tree really be type-parameterized? + - More topology untangling - needs/hates/follow API ugliness diff --git a/src/edu/berkeley/sbp/Tree.java b/src/edu/berkeley/sbp/Tree.java index a6cbd3a..8368673 100644 --- a/src/edu/berkeley/sbp/Tree.java +++ b/src/edu/berkeley/sbp/Tree.java @@ -9,8 +9,7 @@ import java.lang.reflect.*; /** a tree (or node in a tree); see jargon.txt for details */ public class Tree extends PrintableTree> - implements Iterable>, - GraphViz.ToGraphViz { + implements Iterable> { private final Input.Region location; private final T head; @@ -23,9 +22,9 @@ public class Tree private Tree lifted() { return children[children.length-1]; } /** the number of children the tree has */ - public int numChildren() { + public int size() { return lift - ? (children.length-1)+lifted().numChildren() + ? (children.length-1)+lifted().size() : children.length; } @@ -80,16 +79,4 @@ public class Tree protected boolean ignoreSingleton() { return false; } - // ToGraphViz ///////////////////////////////////////////////////////////////////////////// - - public GraphViz.Node toGraphViz(GraphViz gv) { - if (gv.hasNode(this)) return gv.createNode(this); - GraphViz.Node n = gv.createNode(this); - n.label = head()==null ? "" : head().toString(); - for(Tree t : this) n.edge(t, null); - return n; - } - public boolean isTransparent() { return false; } - public boolean isHidden() { return false; } - } diff --git a/src/edu/berkeley/sbp/bind/BindingFunctor.java b/src/edu/berkeley/sbp/bind/BindingFunctor.java index 8a4d042..a7d1ecc 100644 --- a/src/edu/berkeley/sbp/bind/BindingFunctor.java +++ b/src/edu/berkeley/sbp/bind/BindingFunctor.java @@ -29,7 +29,7 @@ public class BindingFunctor implements TreeFunctor, ToJava { for(Tree tc : t) { if (tc.head() != null && tc.head() instanceof Functor) ret.add(((TreeFunctor)tc.head()).invoke(tc.children())); - else if (tc.numChildren() == 0) + else if (tc.size() == 0) ret.add(tc.head()); else { System.err.println("FIXME: don't know what to do about " + tc); diff --git a/src/edu/berkeley/sbp/meta/ArrayBuildingTreeFunctor.java b/src/edu/berkeley/sbp/meta/ArrayBuildingTreeFunctor.java index f1477ed..4975d9c 100644 --- a/src/edu/berkeley/sbp/meta/ArrayBuildingTreeFunctor.java +++ b/src/edu/berkeley/sbp/meta/ArrayBuildingTreeFunctor.java @@ -20,7 +20,7 @@ public class ArrayBuildingTreeFunctor implements TreeFunctor, ToJava { for(Tree tc : t) { if (tc.head() != null && tc.head() instanceof Functor) ret.add(((Functor,Object>)tc.head()).invoke(tc.children())); - else if (tc.numChildren() == 0) + else if (tc.size() == 0) ret.add(tc.head()); else { System.err.println("FIXME: don't know what to do about " + tc); diff --git a/src/edu/berkeley/sbp/misc/RegressionTests.java b/src/edu/berkeley/sbp/misc/RegressionTests.java index d2443ad..bffc0da 100644 --- a/src/edu/berkeley/sbp/misc/RegressionTests.java +++ b/src/edu/berkeley/sbp/misc/RegressionTests.java @@ -202,13 +202,13 @@ public class RegressionTests { else if ("input".equals(tree.head())) return string(tree.children()); else if ("testcase".equals(tree.head())) { String input = string(tree.child(0)); - String[] output = tree.numChildren()>2 ? ((String[])walk(tree, 1)) : new String[0]; - Union grammar = Grammar.create(tree.child(tree.numChildren()-1), "s", new MetaGrammarBindings()); + String[] output = tree.size()>2 ? ((String[])walk(tree, 1)) : new String[0]; + Union grammar = Grammar.create(tree.child(tree.size()-1), "s", new MetaGrammarBindings()); TestCase tc = new TestCase(input, output, grammar, false, false); return tc; } else if ("ts".equals(tree.head())) return walk(tree, 0); else if (tree.head() == null) { - Object[] ret = new Object[tree.numChildren()]; + Object[] ret = new Object[tree.size()]; for(int i=0; i { for(Tree child : tree.children()) walk(child); } public Object walk(Tree tree) { - Object[] args = new Object[tree.numChildren()]; + Object[] args = new Object[tree.size()]; int i = 0; for(Tree child : tree.children()) args[i++] = walk(child); args = Reflection.lub(args); diff --git a/src/edu/berkeley/sbp/util/PrintableTree.java b/src/edu/berkeley/sbp/util/PrintableTree.java index 8e12956..1b5ffc0 100644 --- a/src/edu/berkeley/sbp/util/PrintableTree.java +++ b/src/edu/berkeley/sbp/util/PrintableTree.java @@ -5,8 +5,9 @@ import java.io.*; import java.util.*; import java.lang.reflect.*; -public abstract class PrintableTree implements Iterable, ToJava /*, ToHTML*/ { +public abstract class PrintableTree implements Iterable, ToJava /*, ToHTML*/, GraphViz.ToGraphViz { + protected abstract Object head(); protected abstract String headToString(); protected abstract String headToJava(); protected abstract String left(); @@ -82,4 +83,13 @@ public abstract class PrintableTree implements Iterable sb.append("})"); } + public GraphViz.Node toGraphViz(GraphViz gv) { + if (gv.hasNode(this)) return gv.createNode(this); + GraphViz.Node n = gv.createNode(this); + n.label = head()==null ? "" : head().toString(); + for(T t : this) n.edge(t, null); + return n; + } + public boolean isTransparent() { return false; } + public boolean isHidden() { return false; } }