From 74fc87dc827975ed4e9e411bb169a5f5bfb1010f Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 28 May 2006 03:53:49 -0400 Subject: [PATCH] checkpoint darcs-hash:20060528075349-5007d-2362c3e73923024e33162d4a38b6533b30a074af.gz --- src/edu/berkeley/sbp/Repeat.java | 14 ++++++++--- src/edu/berkeley/sbp/Sequence.java | 32 ++++++++++++------------ src/edu/berkeley/sbp/misc/MetaGrammar.java | 4 ++- src/edu/berkeley/sbp/misc/MetaGrammarTree.java | 6 +++++ 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/edu/berkeley/sbp/Repeat.java b/src/edu/berkeley/sbp/Repeat.java index 2dd3928..c4e9486 100644 --- a/src/edu/berkeley/sbp/Repeat.java +++ b/src/edu/berkeley/sbp/Repeat.java @@ -10,9 +10,10 @@ import java.lang.ref.*; /** currently this class exports only static methods to create repetitions; there are no public instance methods or constructors */ /* FIXME make private again */ public class Repeat extends Union { - public Repeat(final Element e, boolean zeroOkay, boolean manyOkay, final Element separator, boolean maximal) { - this(e, zeroOkay, manyOkay, separator, maximal, null); } - Repeat(final Element e, boolean zeroOkay, boolean manyOkay, final Element separator, boolean maximal, Object tag) { + public Repeat(final Element e, boolean zeroOkay, boolean manyOkay, final Element separator, Object tag) { + this(e, zeroOkay, manyOkay, separator, false, tag); + } + protected Repeat(final Element e, boolean zeroOkay, boolean manyOkay, final Element separator, boolean maximal, Object tag) { super(e+(!manyOkay ? "?" : (zeroOkay ? (maximal ? "**" : "*") : (maximal ? "++" : "+")))+(separator==null?"":("/"+separator)), true); if (maximal && zeroOkay && separator != null) throw new RuntimeException("cannot create a maximal repetition of zero or more items with a separator (yet): " + this); @@ -32,4 +33,11 @@ import java.lang.ref.*; for(Sequence s : this) s.follow = new edu.berkeley.sbp.misc.MetaGrammar.Invert(new edu.berkeley.sbp.misc.MetaGrammar.Infer(separator==null ? e : separator)); } + + public static class Maximal extends Repeat { + public Maximal(final Element e, boolean zeroOkay, boolean manyOkay, final Element separator, Object tag) { + super(e, zeroOkay, manyOkay, separator, true, tag); + } + } + } diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index 1adfadd..34d7142 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -255,30 +255,30 @@ public abstract class Sequence extends Element implements Iterable { // Repeat ////////////////////////////////////////////////////////////////////////////// /** repeat zero or one times */ - public static Repeat maybe(Element e) { return new Repeat(e, true, false, null, false); } - public static Repeat maybe(Element e, Object tag) { return new Repeat(e, true, false, null, false, tag); } + public static Repeat maybe(Element e) { return new Repeat(e, true, false, null, null); } + public static Repeat maybe(Element e, Object tag) { return new Repeat(e, true, false, null, tag); } /** repeat zero or more times */ - public static Repeat many0(Element e) { return new Repeat(e, true, true, null, false); } - public static Repeat many0(Element e, Object tag) { return new Repeat(e, true, true, null, false, tag); } + public static Repeat many0(Element e) { return new Repeat(e, true, true, null, null); } + public static Repeat many0(Element e, Object tag) { return new Repeat(e, true, true, null, tag); } /** repeat zero or more times, separated by sep */ - public static Repeat many0(Element e, Element sep) { return new Repeat(e, true, true, sep, false); } - public static Repeat many0(Element e, Element sep, Object tag) { return new Repeat(e, true, true, sep, false, tag); } + public static Repeat many0(Element e, Element sep) { return new Repeat(e, true, true, sep, null); } + public static Repeat many0(Element e, Element sep, Object tag) { return new Repeat(e, true, true, sep, tag); } /** repeat one or more times */ - public static Repeat many1(Element e) { return new Repeat(e, false, true, null, false); } - public static Repeat many1(Element e, Object tag) { return new Repeat(e, false, true, null, false, tag); } + public static Repeat many1(Element e) { return new Repeat(e, false, true, null, null); } + public static Repeat many1(Element e, Object tag) { return new Repeat(e, false, true, null, tag); } /** repeat one or more times, separated by sep */ - public static Repeat many1(Element e, Element sep) { return new Repeat(e, false, true, sep, false); } - public static Repeat many1(Element e, Element sep, Object tag) { return new Repeat(e, false, true, sep, false, tag); } + public static Repeat many1(Element e, Element sep) { return new Repeat(e, false, true, sep, null); } + public static Repeat many1(Element e, Element sep, Object tag) { return new Repeat(e, false, true, sep, tag); } /** repeat zero or more times, matching a maximal sequence of atoms */ - public static Repeat maximal0(Element e) { return new Repeat(e, true, true, null, true); } - public static Repeat maximal0(Element e, Object tag) { return new Repeat(e, true, true, null, true, tag); } + public static Repeat maximal0(Element e) { return new Repeat.Maximal(e, true, true, null, null); } + public static Repeat maximal0(Element e, Object tag) { return new Repeat.Maximal(e, true, true, null, tag); } /** repeat one or more times, matching a maximal sequence of atoms */ - public static Repeat maximal1(Element e) { return new Repeat(e, false, true, null, true); } - public static Repeat maximal1(Element e, Object tag) { return new Repeat(e, false, true, null, true, tag); } + public static Repeat maximal1(Element e) { return new Repeat.Maximal(e, false, true, null, null); } + public static Repeat maximal1(Element e, Object tag) { return new Repeat.Maximal(e, false, true, null, tag); } /** repeat one or more times, separated by an atom sep, matching a maximal sequence */ - public static Repeat maximal1(Element e, Element sep) { return new Repeat(e, false, true, sep, true); } - public static Repeat maximal1(Element e, Element sep, Object tag) { return new Repeat(e, false, true, sep, true, tag); } + public static Repeat maximal1(Element e, Element sep) { return new Repeat.Maximal(e, false, true, sep, null); } + public static Repeat maximal1(Element e, Element sep, Object tag) { return new Repeat.Maximal(e, false, true, sep, tag); } } diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index f93c53b..f1c7075 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -302,7 +302,9 @@ public class MetaGrammar extends StringWalker { public MetaClause element, separator; public boolean maximal, zero, many; public Element build(BuildContext bc) { - return new Repeat(element.build(bc), zero, many, separator==null?null:separator.build(bc), maximal); + return maximal + ? new Repeat.Maximal(element.build(bc), zero, many, separator==null?null:separator.build(bc), null) + : new Repeat(element.build(bc), zero, many, separator==null?null:separator.build(bc), null); } public MetaRepeat(MetaClause element, boolean maximal, MetaClause separator, boolean zero, boolean many) { this.separator = separator; diff --git a/src/edu/berkeley/sbp/misc/MetaGrammarTree.java b/src/edu/berkeley/sbp/misc/MetaGrammarTree.java index 72eaf50..596e71e 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammarTree.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammarTree.java @@ -36,6 +36,9 @@ public class MetaGrammarTree { + + + // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "=", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "G", new edu.berkeley.sbp.Tree[] { }), new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }), @@ -548,3 +551,6 @@ new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu + + + -- 1.7.10.4