X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FSequence.java;h=d8f39fd860301538c3eee496144f19564f9ad6e6;hb=aeae43c3255b14e4ba65e0171b87c48bbf953c31;hp=d274013904da23504c899ae9ab62651a2f7e1c63;hpb=21da21b94e794fa4d7c7207327764895d92ea528;p=sbp.git 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();