X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FSequence.java;h=d8f39fd860301538c3eee496144f19564f9ad6e6;hp=d274013904da23504c899ae9ab62651a2f7e1c63;hb=aeae43c3255b14e4ba65e0171b87c48bbf953c31;hpb=cd979dfc5968a185c12d6eedc2aa688ef4b0f8b8 diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index d274013..d8f39fd 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -89,6 +89,14 @@ public abstract class Sequence extends Element implements Iterable { /** the imaginary position before or after an element of a sequence; corresponds to an "LR item" */ public class Position { + private Forest zero = null; + public Forest zero() { + if (zero != null) return zero; + if (pos > 0) throw new Error(); + return zero = rewrite(null); + } + + final int pos; private final Position next; final Forest[] holder; @@ -113,7 +121,7 @@ public abstract class Sequence extends Element implements Iterable { /** true iff this Position is the last one in the sequence */ public boolean isLast() { return next()==null; } - // Reduction ///////////////////////////////////////////////////////////////////////////////// + // Position ///////////////////////////////////////////////////////////////////////////////// final Forest rewrite(Token.Location loc) { if (this==firstp()) return epsilonForm();