From: adam Date: Wed, 11 Jan 2006 05:56:46 +0000 (-0500) Subject: checkpoint harmony X-Git-Tag: tag_for_25-Mar~408 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=21da21b94e794fa4d7c7207327764895d92ea528 checkpoint harmony darcs-hash:20060111055646-5007d-43e684dd054f777d270e1de4dd482fd995b1e3ea.gz --- diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index f642878..18bec5a 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -91,7 +91,7 @@ public abstract class Parser { if (start0.contains(p.owner()) && p.next()==null) state.accept = true; - if (p.isRightNullable(cache)) { + if (isRightNullable(p)) { Walk.Follow wf = new Walk.Follow(top.empty(), p.owner(), all_elements, cache); Reduction red = new Reduction(p); @@ -121,6 +121,12 @@ public abstract class Parser { } } + private boolean isRightNullable(Position p) { + if (p.isLast()) return true; + if (!p.element().possiblyEpsilon(this)) return false; + return isRightNullable(p.next()); + } + /** a single state in the LR table and the transitions possible from it */ public class State implements Comparable, IntegerMappable, Iterable { diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index adf93fa..d274013 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -100,11 +100,6 @@ public abstract class Sequence extends Element implements Iterable { } boolean isFirst() { return pos==0; } - boolean isRightNullable(Walk.Cache cache) { - if (isLast()) return true; - if (!element().possiblyEpsilon(cache)) return false; - return next().isRightNullable(cache); - } /** the element immediately after this Position, or null if this is the last Position */ public Element element() { return pos>=elements.length ? null : elements[pos]; } @@ -142,7 +137,7 @@ public abstract class Sequence extends Element implements Iterable { for(Position p = Sequence.this.firstp(); p != null; p = p.next()) { ret.append(' '); if (p==this) ret.append(" | "); - if (p.element()!=null) ret.append(p.element().possiblyEpsilon(null) ? "["+p.element()+"]" : p.element()); + if (p.element()!=null) ret.append(p.element()); else ret.append(' '); } ret.append("}>"); diff --git a/src/edu/berkeley/sbp/Walk.java b/src/edu/berkeley/sbp/Walk.java index db76747..22ef52e 100644 --- a/src/edu/berkeley/sbp/Walk.java +++ b/src/edu/berkeley/sbp/Walk.java @@ -170,7 +170,6 @@ abstract class Walk { public final HashMap possiblyEpsilon = new HashMap(); public HashMap eof = new HashMap(); public HashMap follow = new HashMap(); - //public HashMap> ys = new HashMap>(); public HashMapBag ys = new HashMapBag(); public HashMap atoms = new HashMap(); }