From 2690f6c749f117a103c57d651d89f1b4fbf1316d Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 1 Jan 2006 21:37:13 -0500 Subject: [PATCH] added Element.toAtom() darcs-hash:20060102023713-5007d-26080b7906673e77b89f10ae42fe09a8174fc89e.gz --- src/edu/berkeley/sbp/Atom.java | 2 ++ src/edu/berkeley/sbp/Element.java | 1 + src/edu/berkeley/sbp/Sequence.java | 5 +++++ src/edu/berkeley/sbp/Union.java | 11 +++++++++++ 4 files changed, 19 insertions(+) diff --git a/src/edu/berkeley/sbp/Atom.java b/src/edu/berkeley/sbp/Atom.java index 1b9c254..037dfaa 100644 --- a/src/edu/berkeley/sbp/Atom.java +++ b/src/edu/berkeley/sbp/Atom.java @@ -16,6 +16,8 @@ public abstract class Atom extends Element implements Topology< void reachable(HashSet h) { /* do-nothing */ } + public Topology toAtom() { return dup(); } + /** equality is based on the underlying Topology */ public int hashCode() { return rt.hashCode(); } diff --git a/src/edu/berkeley/sbp/Element.java b/src/edu/berkeley/sbp/Element.java index b199a23..5f55be6 100644 --- a/src/edu/berkeley/sbp/Element.java +++ b/src/edu/berkeley/sbp/Element.java @@ -13,6 +13,7 @@ public abstract class Element { /** add all positions reachable from the start of this Element to @rp */ abstract void reachable(HashSet rp); + abstract Topology toAtom(); Forest epsilonForm() { throw new Error("no epsilon form: " + this); } final boolean possiblyEpsilon(Walk.Cache cache) { Boolean ret = cache==null ? null : cache.possiblyEpsilon.get(this); diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index fcff530..9586f72 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -35,6 +35,11 @@ public abstract class Sequence extends Element implements Iterable { //////////////////////////////////////////////////////////////////////////////// + Topology toAtom() { + if (elements.length!=1) return null; + return elements[0].toAtom(); + } + protected final Element[] elements; final HashSet needs; diff --git a/src/edu/berkeley/sbp/Union.java b/src/edu/berkeley/sbp/Union.java index 1d4841f..7274dae 100644 --- a/src/edu/berkeley/sbp/Union.java +++ b/src/edu/berkeley/sbp/Union.java @@ -18,6 +18,17 @@ public class Union extends Element implements Iterable { void reachable(HashSet h) { for(Sequence s : alternatives) s.reachable(h); } + Topology toAtom() { + if (alternatives.size()==0) return null; + Topology ret = null; + for(Sequence s : this) { + Topology a = s.toAtom(); + if (ret==null) ret = a.dup(); + else ret.add(a.dup()); + } + return ret; + } + /** adds an alternative */ public void add(Sequence s) { alternatives.add(s); } -- 1.7.10.4