X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FForest.java;h=bfa4eccfe6ece7964f4fc623510705a4656d8b92;hp=d47e721d0cb29a4c02d151796673b4ec569fb9d8;hb=45d799349e635f1a99e3974e4504a43d5a7aaf33;hpb=95c87aa402977de2b96c48bd14c439b46ad49777 diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index d47e721..bfa4ecc 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -39,7 +39,9 @@ public abstract class Forest /*extends PrintableTree>*/ impl public void addTree(Tree t); } public static class HashSetTreeConsumer extends HashSet> implements TreeConsumer { - public void addTree(Tree t) { super.add(t); } + public void addTree(Tree t) { + super.add(t); + } } static Forest singleton(Input.Location loc, Position p) { @@ -58,6 +60,7 @@ public abstract class Forest /*extends PrintableTree>*/ impl void expand(int i, TreeMaker h); } public abstract void edges(GraphViz.Node n); + public boolean ambiguous() { return false; } protected static class MyBody extends Forest implements Body /* extends PrintableTree> implements */ { public boolean isTransparent() { return false; } @@ -67,6 +70,7 @@ public abstract class Forest /*extends PrintableTree>*/ impl GraphViz.Node n = gv.createNode(this); n.label = headToString()==null?"":headToString(); n.directed = true; + n.comment = reduction==null?null:reduction+""; edges(n); return n; } @@ -75,7 +79,7 @@ public abstract class Forest /*extends PrintableTree>*/ impl if (edges) return; edges = true; for(int i=0; i /*extends PrintableTree>*/ impl * viewed, it becomes immutable */ static class Ref extends Forest { + public boolean ambiguous() { + if (hp.size()==0) return false; + if (hp.size()==1) return hp.iterator().next().ambiguous(); + return true; + } private FastSet> hp = new FastSet>(); public Ref() { } public int toInt() { @@ -162,9 +171,12 @@ public abstract class Forest /*extends PrintableTree>*/ impl public boolean isTransparent() { return hp.size()==1; } public boolean isHidden() { return hp.size()==0; } - public void edges(GraphViz.Node n) { for(Forest f : hp) f.edges(n); } + public void edges(GraphViz.Node n) { + if (hp.size()==1) { hp.iterator().next().edges(n); return; } + for(Forest f : hp) f.edges(n); + } public GraphViz.Node toGraphViz(GraphViz gv) { - if (hp.size()==0) return null; + //if (hp.size()==0) return null; if (hp.size()==1) return hp.iterator().next().toGraphViz(gv); if (gv.hasNode(this)) return gv.createNode(this); GraphViz.Node n = gv.createNode(this);