X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FSequence.java;h=610af5879d4daa47b54bbf360def27de2d7ee97d;hp=065150cacf1968512ff777460b1b09b13dc0cf20;hb=526da96dd06e152d194ec92c9ef9df6085a1251b;hpb=ebb5fe5647046306f415e31e4967b23169c9004e diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index 065150c..610af58 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -51,7 +51,7 @@ public abstract class Sequence extends Element implements Iterable { HashSet hated; final HashSet needs; final HashSet hates; - boolean lame = false; + public boolean lame = false; final Position firstp; Position firstp() { return firstp; } @@ -76,8 +76,7 @@ public abstract class Sequence extends Element implements Iterable { Forest epsilonForm() { if (epsilonForm==null) { epsilonForm = new Forest.Ref(); - Forest fo = firstp().rewrite(null); - epsilonForm.merge(fo); + epsilonForm.merge(firstp().rewrite2(null)); } return epsilonForm; } @@ -122,8 +121,11 @@ public abstract class Sequence extends Element implements Iterable { // Reduction ///////////////////////////////////////////////////////////////////////////////// final Forest rewrite(Token.Location loc) { - if (this==firstp() && eps) return epsilonForm; - eps = true; + if (this==firstp()) return epsilonForm(); + return rewrite2(loc); + } + + final Forest rewrite2(Token.Location loc) { for(int i=0; i { } Forest ret = Sequence.this.postReduce(loc, holder); for(int k=0; k