projects
/
sbp.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6caa23e
)
added Element.toAtom()
author
adam
<adam@megacz.com>
Mon, 2 Jan 2006 02:37:13 +0000
(21:37 -0500)
committer
adam
<adam@megacz.com>
Mon, 2 Jan 2006 02:37:13 +0000
(21:37 -0500)
darcs-hash:
20060102023713
-5007d-
26080b7906673e77b89f10ae42fe09a8174fc89e
.gz
src/edu/berkeley/sbp/Atom.java
patch
|
blob
|
history
src/edu/berkeley/sbp/Element.java
patch
|
blob
|
history
src/edu/berkeley/sbp/Sequence.java
patch
|
blob
|
history
src/edu/berkeley/sbp/Union.java
patch
|
blob
|
history
diff --git
a/src/edu/berkeley/sbp/Atom.java
b/src/edu/berkeley/sbp/Atom.java
index
1b9c254
..
037dfaa
100644
(file)
--- a/
src/edu/berkeley/sbp/Atom.java
+++ b/
src/edu/berkeley/sbp/Atom.java
@@
-16,6
+16,8
@@
public abstract class Atom<T extends Token> extends Element implements Topology<
void reachable(HashSet<Sequence.Position> h) { /* do-nothing */ }
void reachable(HashSet<Sequence.Position> h) { /* do-nothing */ }
+ public Topology toAtom() { return dup(); }
+
/** equality is based on the underlying <tt>Topology</tt> */
public int hashCode() { return rt.hashCode(); }
/** equality is based on the underlying <tt>Topology</tt> */
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
(file)
--- 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<Sequence.Position> rp);
/** add all positions reachable from the start of this Element to @rp */
abstract void reachable(HashSet<Sequence.Position> 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);
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
(file)
--- 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<Element> {
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
+ Topology toAtom() {
+ if (elements.length!=1) return null;
+ return elements[0].toAtom();
+ }
+
protected final Element[] elements;
final HashSet<Sequence> needs;
protected final Element[] elements;
final HashSet<Sequence> needs;
diff --git
a/src/edu/berkeley/sbp/Union.java
b/src/edu/berkeley/sbp/Union.java
index
1d4841f
..
7274dae
100644
(file)
--- 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<Sequence> {
void reachable(HashSet<Sequence.Position> h) { for(Sequence s : alternatives) s.reachable(h); }
void reachable(HashSet<Sequence.Position> 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); }
/** adds an alternative */
public void add(Sequence s) { alternatives.add(s); }