X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FSequence.java;h=33a91bbb6153a917f66591ee2ddbbabed17d9ccf;hp=0ac3500bfd476d358c509062fdc2785dce43b54b;hb=2bee2b032b0422d212e17082cc4dcbf28cb897ac;hpb=d948b6363742aa34d9269cb4a49407e439ee896d diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index 0ac3500..33a91bb 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -45,6 +45,9 @@ public abstract class Sequence extends Element implements Iterable { public static Sequence rewritingSequence(Object tag, Element[] e, boolean[] drops) { return new RewritingSequence(tag, e, drops); } + public static Sequence regionRewritingSequence(Functor tagfunctor, Element[] e, boolean[] drops) { + return new RegionRewritingSequence(tagfunctor, e, drops); } + //////////////////////////////////////////////////////////////////////////////// public Element follow = null; @@ -222,8 +225,24 @@ public abstract class Sequence extends Element implements Iterable { } } + + + static class RegionRewritingSequence extends RewritingSequence { + private Functor tagf; + public RegionRewritingSequence(Functor tagfunctor, Element[] e, boolean[] drops) { + super(null, e, drops); + this.tagf = tagfunctor; + } + public Forest postReduce(Input.Region loc, Forest[] args, Position p) { + this.tag = tagf.invoke(loc); + Forest ret = super.postReduce(loc, args, p); + this.tag = null; + return ret; + } + } + static class RewritingSequence extends Sequence { - /*private*/public final Object tag; + /*private*/public /*final*/ Object tag; private final boolean[] drops; private int count = 0; Sequence _clone() { return new RewritingSequence(tag, elements, drops); }