From d4ca769e542b2489b1e23cfcbdc3a0b7275b87cd Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Mon, 13 Apr 2020 18:40:41 -0400 Subject: Cleanup pass Cleanup pass to uniformize things --- .../parserutils/delims/DelimiterException.java | 2 +- .../utils/parserutils/delims/DelimiterGroup.java | 194 +++++++++++---------- .../bjc/utils/parserutils/delims/RegexCloser.java | 2 +- .../bjc/utils/parserutils/delims/RegexOpener.java | 8 +- .../delims/SequenceCharacteristics.java | 45 +++-- .../parserutils/delims/SequenceDelimiter.java | 138 +++++++-------- .../utils/parserutils/delims/StringDelimiter.java | 8 +- 7 files changed, 207 insertions(+), 190 deletions(-) (limited to 'base/src/main/java/bjc/utils/parserutils/delims') diff --git a/base/src/main/java/bjc/utils/parserutils/delims/DelimiterException.java b/base/src/main/java/bjc/utils/parserutils/delims/DelimiterException.java index 427b4cf..9c4d4bc 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/DelimiterException.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/DelimiterException.java @@ -10,7 +10,7 @@ public class DelimiterException extends RuntimeException { * Create a new generic delimiter exception. * * @param res - * The reason for this exception. + * The reason for this exception. */ public DelimiterException(final String res) { super(res); diff --git a/base/src/main/java/bjc/utils/parserutils/delims/DelimiterGroup.java b/base/src/main/java/bjc/utils/parserutils/delims/DelimiterGroup.java index 96830b2..ba61531 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/DelimiterGroup.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/DelimiterGroup.java @@ -24,7 +24,7 @@ import bjc.funcdata.IList; * @author EVE * * @param - * The type of items in the sequence. + * The type of items in the sequence. */ public class DelimiterGroup { /** @@ -54,10 +54,10 @@ public class DelimiterGroup { * Create a new instance of a delimiter group. * * @param open - * The item that opened this group. + * The item that opened this group. * * @param parms - * Any parameters from the opener. + * Any parameters from the opener. */ public OpenGroup(final T open, final T[] parms) { opener = open; @@ -72,7 +72,7 @@ public class DelimiterGroup { * Add an item to this group instance. * * @param itm - * The item to add to this group instance. + * The item to add to this group instance. */ public void addItem(final ITree itm) { currentGroup.add(itm); @@ -82,33 +82,33 @@ public class DelimiterGroup { * Mark a subgroup. * * @param marker - * The item that indicated this subgroup. + * The item that indicated this subgroup. * * @param chars - * The characteristics for building the tree. + * The characteristics for building the tree. */ public void markSubgroup(final T marker, final SequenceCharacteristics chars) { /* * Add all of the contents to the subgroup. */ final ITree subgroupContents = new Tree<>(chars.contents); - for(final ITree itm : currentGroup) { + for (final ITree itm : currentGroup) { subgroupContents.addChild(itm); } /* * Handle subordinate sub-groups. */ - while(!contents.isEmpty()) { + while (!contents.isEmpty()) { final ITree possibleSubordinate = contents.peek(); /* * Subordinate lower priority subgroups. */ - if(possibleSubordinate.getHead().equals(chars.subgroup)) { + if (possibleSubordinate.getHead().equals(chars.subgroup)) { final T otherMarker = possibleSubordinate.getChild(1).getHead(); - if(subgroups.get(marker) > subgroups.get(otherMarker)) { + if (subgroups.get(marker) > subgroups.get(otherMarker)) { subgroupContents.prependChild(contents.pop()); } else { break; @@ -118,7 +118,8 @@ public class DelimiterGroup { } } - final Tree subgroup = new Tree<>(chars.subgroup, subgroupContents, new Tree<>(marker)); + final Tree subgroup + = new Tree<>(chars.subgroup, subgroupContents, new Tree<>(marker)); contents.push(subgroup); @@ -129,10 +130,10 @@ public class DelimiterGroup { * Convert this group into a tree. * * @param closer - * The item that closed this group. + * The item that closed this group. * * @param chars - * The characteristics for building the tree. + * The characteristics for building the tree. * * @return This group as a tree. */ @@ -140,7 +141,7 @@ public class DelimiterGroup { /* * Mark any implied subgroups. */ - if(impliedSubgroups.containsKey(closer)) { + if (impliedSubgroups.containsKey(closer)) { markSubgroup(impliedSubgroups.get(closer), chars); } @@ -148,13 +149,13 @@ public class DelimiterGroup { final ITree res = new Tree<>(chars.contents); /* - * Add either the contents of the current group, or - * subgroups if they're there. + * Add either the contents of the current group, or subgroups if they're + * there. */ - if(contents.isEmpty()) { + if (contents.isEmpty()) { currentGroup.forEach(res::addChild); } else { - while(!contents.isEmpty()) { + while (!contents.isEmpty()) { res.prependChild(contents.poll()); } @@ -183,7 +184,7 @@ public class DelimiterGroup { * Check if a group is excluded at the top level of this group. * * @param grupName - * The group to check. + * The group to check. * * @return Whether or not the provided group is excluded. */ @@ -195,16 +196,17 @@ public class DelimiterGroup { * Check if the provided delimiter would close this group. * * @param del - * The string to check as a closing delimiter. + * The string to check as a closing delimiter. * - * @return Whether or not the provided delimiter closes this - * group. + * @return Whether or not the provided delimiter closes this group. */ public boolean isClosing(final T del) { - if(closingDelimiters.contains(del)) return true; + if (closingDelimiters.contains(del)) + return true; - for(final BiPredicate pred : predClosers) { - if(pred.test(del, params)) return true; + for (final BiPredicate pred : predClosers) { + if (pred.test(del, params)) + return true; } return closingDelimiters.contains(del); @@ -229,11 +231,9 @@ public class DelimiterGroup { } /** - * Get the groups that are allowed to open anywhere inside this - * group. + * Get the groups that are allowed to open anywhere inside this group. * - * @return The groups allowed to open anywhere inside this - * group. + * @return The groups allowed to open anywhere inside this group. */ public Map getNestingOpeners() { return nestedOpenDelimiters; @@ -243,7 +243,7 @@ public class DelimiterGroup { * Checks if a given token marks a subgroup. * * @param tok - * The token to check. + * The token to check. * * @return Whether or not the token marks a subgroup. */ @@ -255,18 +255,19 @@ public class DelimiterGroup { * Checks if a given token opens a group. * * @param marker - * The token to check. + * The token to check. * - * @return The name of the group T opens, or null if it doesn't - * open one. + * @return The name of the group T opens, or null if it doesn't open one. */ public IPair doesOpen(final T marker) { - if(openDelimiters.containsKey(marker)) return new Pair<>(openDelimiters.get(marker), null); + if (openDelimiters.containsKey(marker)) + return new Pair<>(openDelimiters.get(marker), null); - for(final Function> pred : predOpeners) { + for (final Function> pred : predOpeners) { final IPair par = pred.apply(marker); - if(par.getLeft() != null) return par; + if (par.getLeft() != null) + return par; } return new Pair<>(null, null); @@ -303,8 +304,7 @@ public class DelimiterGroup { private final Set groupExclusions; /* - * Mapping from sub-group delimiters, to any sub-groups enclosed in - * them. + * Mapping from sub-group delimiters, to any sub-groups enclosed in them. */ private final Map subgroups; @@ -324,10 +324,11 @@ public class DelimiterGroup { * Create a new empty delimiter group. * * @param name - * The name of the delimiter group + * The name of the delimiter group */ public DelimiterGroup(final T name) { - if(name == null) throw new NullPointerException("Group name must not be null"); + if (name == null) + throw new NullPointerException("Group name must not be null"); groupName = name; @@ -350,22 +351,22 @@ public class DelimiterGroup { * Adds one or more delimiters that close this group. * * @param closers - * Delimiters that close this group. + * Delimiters that close this group. */ @SafeVarargs public final void addClosing(final T... closers) { final List closerList = Arrays.asList(closers); - for(final T closer : closerList) { - if(closer == null) { + for (final T closer : closerList) { + if (closer == null) { throw new NullPointerException("Closing delimiter must not be null"); - } else if(closer.equals("")) { + } else if (closer.equals("")) { /* - * We can do this because equals works on - * arbitrary objects, not just those of the same - * type. + * We can do this because equals works on arbitrary objects, not just + * those of the same type. */ - throw new IllegalArgumentException("Empty string is not a valid exclusion"); + throw new IllegalArgumentException( + "Empty string is not a valid exclusion"); } else { closingDelimiters.add(closer); } @@ -373,24 +374,23 @@ public class DelimiterGroup { } /** - * Adds one or more groups that cannot occur in the top level of this - * group. + * Adds one or more groups that cannot occur in the top level of this group. * * @param exclusions - * The groups forbidden in the top level of this group. + * The groups forbidden in the top level of this group. */ @SafeVarargs public final void addTopLevelForbid(final T... exclusions) { - for(final T exclusion : exclusions) { - if(exclusion == null) { + for (final T exclusion : exclusions) { + if (exclusion == null) { throw new NullPointerException("Exclusion must not be null"); - } else if(exclusion.equals("")) { + } else if (exclusion.equals("")) { /* - * We can do this because equals works on - * arbitrary objects, not just those of the same - * type. + * We can do this because equals works on arbitrary objects, not just + * those of the same type. */ - throw new IllegalArgumentException("Empty string is not a valid exclusion"); + throw new IllegalArgumentException( + "Empty string is not a valid exclusion"); } else { topLevelExclusions.add(exclusion); } @@ -401,20 +401,20 @@ public class DelimiterGroup { * Adds one or more groups that cannot occur at all in this group. * * @param exclusions - * The groups forbidden inside this group. + * The groups forbidden inside this group. */ @SafeVarargs public final void addGroupForbid(final T... exclusions) { - for(final T exclusion : exclusions) { - if(exclusion == null) { + for (final T exclusion : exclusions) { + if (exclusion == null) { throw new NullPointerException("Exclusion must not be null"); - } else if(exclusion.equals("")) { + } else if (exclusion.equals("")) { /* - * We can do this because equals works on - * arbitrary objects, not just those of the same - * type. + * We can do this because equals works on arbitrary objects, not just + * those of the same type. */ - throw new IllegalArgumentException("Empty string is not a valid exclusion"); + throw new IllegalArgumentException( + "Empty string is not a valid exclusion"); } else { groupExclusions.add(exclusion); } @@ -425,13 +425,14 @@ public class DelimiterGroup { * Adds sub-group markers to this group. * * @param subgroup - * The token to mark a sub-group. + * The token to mark a sub-group. * * @param priority - * The priority of this sub-group. + * The priority of this sub-group. */ public void addSubgroup(final T subgroup, final int priority) { - if(subgroup == null) throw new NullPointerException("Subgroup marker must not be null"); + if (subgroup == null) + throw new NullPointerException("Subgroup marker must not be null"); subgroups.put(subgroup, priority); } @@ -440,15 +441,16 @@ public class DelimiterGroup { * Adds a marker that opens a group at the top level of this group. * * @param opener - * The marker that opens the group. + * The marker that opens the group. * * @param group - * The group opened by the marker. + * The group opened by the marker. */ public void addOpener(final T opener, final T group) { - if(opener == null) + if (opener == null) throw new NullPointerException("Opener must not be null"); - else if(group == null) throw new NullPointerException("Group to open must not be null"); + else if (group == null) + throw new NullPointerException("Group to open must not be null"); openDelimiters.put(opener, group); } @@ -457,15 +459,15 @@ public class DelimiterGroup { * Adds a marker that opens a group inside of this group. * * @param opener - * The marker that opens the group. + * The marker that opens the group. * * @param group - * The group opened by the marker. + * The group opened by the marker. */ public void addNestedOpener(final T opener, final T group) { - if(opener == null) { + if (opener == null) { throw new NullPointerException("Opener must not be null"); - } else if(group == null) { + } else if (group == null) { throw new NullPointerException("Group to open must not be null"); } @@ -476,20 +478,22 @@ public class DelimiterGroup { * Mark a closing delimiter as implying a subgroup. * * @param closer - * The closing delimiter. + * The closing delimiter. * * @param subgroup - * The subgroup to imply. + * The subgroup to imply. */ public void implySubgroup(final T closer, final T subgroup) { - if(closer == null) { + if (closer == null) { throw new NullPointerException("Closer must not be null"); - } else if(subgroup == null) { + } else if (subgroup == null) { throw new NullPointerException("Subgroup must not be null"); - } else if(!closingDelimiters.contains(closer)) { - throw new IllegalArgumentException(String.format("No closing delimiter '%s' defined", closer)); - } else if(!subgroups.containsKey(subgroup)) { - throw new IllegalArgumentException(String.format("No subgroup '%s' defined", subgroup)); + } else if (!closingDelimiters.contains(closer)) { + throw new IllegalArgumentException( + String.format("No closing delimiter '%s' defined", closer)); + } else if (!subgroups.containsKey(subgroup)) { + throw new IllegalArgumentException( + String.format("No subgroup '%s' defined", subgroup)); } impliedSubgroups.put(closer, subgroup); @@ -506,26 +510,26 @@ public class DelimiterGroup { builder.append("], "); builder.append("closingDelimiters=["); - for(final T closer : closingDelimiters) { + for (final T closer : closingDelimiters) { builder.append(closer + ","); } builder.deleteCharAt(builder.length() - 1); builder.append("]"); - if(topLevelExclusions != null && !topLevelExclusions.isEmpty()) { + if (topLevelExclusions != null && !topLevelExclusions.isEmpty()) { builder.append(", "); builder.append("topLevelExclusions=["); - for(final T exclusion : topLevelExclusions) { + for (final T exclusion : topLevelExclusions) { builder.append(exclusion + ","); } builder.deleteCharAt(builder.length() - 1); builder.append("]"); } - if(groupExclusions != null && !groupExclusions.isEmpty()) { + if (groupExclusions != null && !groupExclusions.isEmpty()) { builder.append(", "); builder.append("groupExclusions=["); - for(final T exclusion : groupExclusions) { + for (final T exclusion : groupExclusions) { builder.append(exclusion + ","); } builder.deleteCharAt(builder.length() - 1); @@ -541,10 +545,10 @@ public class DelimiterGroup { * Open an instance of this group. * * @param opener - * The item that opened this group. + * The item that opened this group. * * @param parms - * The parameters that opened this group + * The parameters that opened this group * * @return An opened instance of this group. */ @@ -556,7 +560,7 @@ public class DelimiterGroup { * Adds a predicated opener to the top level of this group. * * @param pred - * The predicate that defines the opener and its parameters. + * The predicate that defines the opener and its parameters. */ public void addPredOpener(final Function> pred) { predOpeners.add(pred); @@ -566,7 +570,7 @@ public class DelimiterGroup { * Adds a predicated closer to the top level of this group. * * @param pred - * The predicate that defines the closer. + * The predicate that defines the closer. */ public void addPredCloser(final BiPredicate pred) { predClosers.add(pred); @@ -576,7 +580,7 @@ public class DelimiterGroup { * Set whether or not this group starts a new nesting set. * * @param forgetful - * Whether this group starts a new nesting set. + * Whether this group starts a new nesting set. */ public void setForgetful(final boolean forgetful) { this.forgetful = forgetful; diff --git a/base/src/main/java/bjc/utils/parserutils/delims/RegexCloser.java b/base/src/main/java/bjc/utils/parserutils/delims/RegexCloser.java index a3c831e..8cc08ad 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/RegexCloser.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/RegexCloser.java @@ -16,7 +16,7 @@ public class RegexCloser implements BiPredicate { * Create a new regex closer. * * @param closer - * The format string to use for closing. + * The format string to use for closing. */ public RegexCloser(final String closer) { rep = closer; diff --git a/base/src/main/java/bjc/utils/parserutils/delims/RegexOpener.java b/base/src/main/java/bjc/utils/parserutils/delims/RegexOpener.java index 64dc81c..f08201c 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/RegexOpener.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/RegexOpener.java @@ -23,10 +23,10 @@ public class RegexOpener implements Function> { * Create a new regex opener. * * @param groupName - * The name of the opened group. + * The name of the opened group. * * @param groupRegex - * The regex that matches the opener. + * The regex that matches the opener. */ public RegexOpener(final String groupName, final String groupRegex) { name = groupName; @@ -38,12 +38,12 @@ public class RegexOpener implements Function> { public IPair apply(final String str) { final Matcher m = patt.matcher(str); - if(m.matches()) { + if (m.matches()) { final int numGroups = m.groupCount(); final String[] parms = new String[numGroups + 1]; - for(int i = 0; i <= numGroups; i++) { + for (int i = 0; i <= numGroups; i++) { parms[i] = m.group(i); } diff --git a/base/src/main/java/bjc/utils/parserutils/delims/SequenceCharacteristics.java b/base/src/main/java/bjc/utils/parserutils/delims/SequenceCharacteristics.java index 9e4c167..e48e341 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/SequenceCharacteristics.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/SequenceCharacteristics.java @@ -6,7 +6,7 @@ package bjc.utils.parserutils.delims; * @author EVE * * @param - * The type of item in the tree. + * The type of item in the tree. */ public class SequenceCharacteristics { /** @@ -29,11 +29,11 @@ public class SequenceCharacteristics { * Create a new set of parameters for building a tree. * * @param root - * The root marker. + * The root marker. * @param contents - * The group/subgroup contents marker. + * The group/subgroup contents marker. * @param subgroup - * The subgroup marker. + * The subgroup marker. */ public SequenceCharacteristics(final T root, final T contents, final T subgroup) { this.root = root; @@ -55,23 +55,32 @@ public class SequenceCharacteristics { @Override public boolean equals(final Object obj) { - if(this == obj) return true; - if(obj == null) return false; - if(!(obj instanceof SequenceCharacteristics)) return false; + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof SequenceCharacteristics)) + return false; final SequenceCharacteristics other = (SequenceCharacteristics) obj; - if(contents == null) { - if(other.contents != null) return false; - } else if(!contents.equals(other.contents)) return false; - - if(root == null) { - if(other.root != null) return false; - } else if(!root.equals(other.root)) return false; - - if(subgroup == null) { - if(other.subgroup != null) return false; - } else if(!subgroup.equals(other.subgroup)) return false; + if (contents == null) { + if (other.contents != null) + return false; + } else if (!contents.equals(other.contents)) + return false; + + if (root == null) { + if (other.root != null) + return false; + } else if (!root.equals(other.root)) + return false; + + if (subgroup == null) { + if (other.subgroup != null) + return false; + } else if (!subgroup.equals(other.subgroup)) + return false; return true; } diff --git a/base/src/main/java/bjc/utils/parserutils/delims/SequenceDelimiter.java b/base/src/main/java/bjc/utils/parserutils/delims/SequenceDelimiter.java index 7424770..3e87abe 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/SequenceDelimiter.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/SequenceDelimiter.java @@ -24,7 +24,7 @@ import bjc.utils.funcutils.StringUtils; * @author EVE * * @param - * The type of items in the sequence. + * The type of items in the sequence. */ public class SequenceDelimiter { /* Mapping from group names to actual groups. */ @@ -39,11 +39,10 @@ public class SequenceDelimiter { } /** - * Convert a linear sequence into a tree that matches the delimiter - * structure. + * Convert a linear sequence into a tree that matches the delimiter structure. * - * Essentially, creates a parse tree of the expression against the - * following grammar while obeying the defined grouping rules. + * Essentially, creates a parse tree of the expression against the following + * grammar while obeying the defined grouping rules. * *
 	 *              → ( |  | )*
@@ -57,39 +56,37 @@ public class SequenceDelimiter {
 	 * 
* * @param chars - * The parameters on how to mark certain portions of the tree. + * The parameters on how to mark certain portions of the tree. * @param seq - * The sequence to delimit. + * The sequence to delimit. * - * @return The sequence as a tree that matches its group structure. Each - * node in the tree is either a data node, a subgroup node, or a - * group node. + * @return The sequence as a tree that matches its group structure. Each node in + * the tree is either a data node, a subgroup node, or a group node. * - * A data node is a leaf node whose data is the string it - * represents. + * A data node is a leaf node whose data is the string it represents. * - * A subgroup node is a node with two children, and the name of - * the sub-group as its label. The first child is the contents - * of the sub-group, and the second is the marker that started - * the subgroup. The marker is a leaf node labeled with its - * contents, and the contents contains a recursive tree. + * A subgroup node is a node with two children, and the name of the + * sub-group as its label. The first child is the contents of the + * sub-group, and the second is the marker that started the subgroup. + * The marker is a leaf node labeled with its contents, and the contents + * contains a recursive tree. * - * A group node is a node with three children, and the name of - * the group as its label. The first child is the opening - * delimiter, the second is the group contents, and the third is - * the closing delimiter. The delimiters are leaf nodes labeled - * with their contents, while the group node contains a - * recursive tree. + * A group node is a node with three children, and the name of the group + * as its label. The first child is the opening delimiter, the second is + * the group contents, and the third is the closing delimiter. The + * delimiters are leaf nodes labeled with their contents, while the + * group node contains a recursive tree. * * @throws DelimiterException - * Thrown if something went wrong during sequence delimitation. + * Thrown if something went wrong during sequence + * delimitation. * */ public ITree delimitSequence(final SequenceCharacteristics chars, @SuppressWarnings("unchecked") final T... seq) throws DelimiterException { - if(initialGroup == null) { + if (initialGroup == null) { throw new NullPointerException("Initial group must be specified."); - } else if(chars == null) { + } else if (chars == null) { throw new NullPointerException("Sequence characteristics must not be null"); } @@ -113,21 +110,20 @@ public class SequenceDelimiter { /* * Process each member of the sequence. */ - for(int i = 0; i < seq.length; i++) { + for (int i = 0; i < seq.length; i++) { final T tok = seq[i]; /* Check if this token could open a group. */ final IPair possibleOpenPar = groupStack.top().doesOpen(tok); T possibleOpen = possibleOpenPar.getLeft(); - if(possibleOpen == null) { + if (possibleOpen == null) { /* * Handle nested openers. * - * Local openers take priority over nested ones - * if they overlap. + * Local openers take priority over nested ones if they overlap. */ - if(allowedDelimiters.top().containsKey(tok)) { + if (allowedDelimiters.top().containsKey(tok)) { possibleOpen = allowedDelimiters.top().get(tok).iterator().next(); } } @@ -135,59 +131,61 @@ public class SequenceDelimiter { /* * If we have an opening delimiter, handle it. */ - if(possibleOpen != null) { + if (possibleOpen != null) { final DelimiterGroup group = groups.get(possibleOpen); /* - * Error on groups that can't open in this - * context. + * Error on groups that can't open in this context. * - * This means groups that can't occur at the - * top-level of this group, as well as nested - * exclusions from all enclosing groups. + * This means groups that can't occur at the top-level of this group, as + * well as nested exclusions from all enclosing groups. */ - if(isForbidden(groupStack, forbiddenDelimiters, possibleOpen)) { + if (isForbidden(groupStack, forbiddenDelimiters, possibleOpen)) { T forbiddenBy; - if(whoForbid.containsKey(tok)) { + if (whoForbid.containsKey(tok)) { forbiddenBy = whoForbid.get(tok); } else { forbiddenBy = groupStack.top().getName(); } - final String ctxList = StringUtils.toEnglishList(groupStack.toArray(), "then"); + final String ctxList + = StringUtils.toEnglishList(groupStack.toArray(), "then"); - final String fmt = "Group '%s' can't be opened in this context. (forbidden by '%s')\nContext Stack: %s"; + final String fmt + = "Group '%s' can't be opened in this context. (forbidden by '%s')\nContext Stack: %s"; - throw new DelimiterException(String.format(fmt, group, forbiddenBy, ctxList)); + throw new DelimiterException( + String.format(fmt, group, forbiddenBy, ctxList)); } /* Add an open group. */ - final DelimiterGroup.OpenGroup open = group.open(tok, possibleOpenPar.getRight()); + final DelimiterGroup.OpenGroup open + = group.open(tok, possibleOpenPar.getRight()); groupStack.push(open); /* * Handle 'forgetful' groups that reset nesting */ - if(open.isForgetful()) { + if (open.isForgetful()) { allowedDelimiters.push(HashMultimap.create()); forbiddenDelimiters.push(HashMultiset.create()); } /* Add the nested opens from this group. */ final Multimap currentAllowed = allowedDelimiters.top(); - for(final Entry opener : open.getNestingOpeners().entrySet()) { + for (final Entry opener : open.getNestingOpeners().entrySet()) { currentAllowed.put(opener.getKey(), opener.getValue()); } /* Add the nested exclusions from this group */ final Multiset currentForbidden = forbiddenDelimiters.top(); - for(final T exclusion : open.getNestingExclusions()) { + for (final T exclusion : open.getNestingExclusions()) { currentForbidden.add(exclusion); whoForbid.put(exclusion, possibleOpen); } - } else if(!groupStack.isEmpty() && groupStack.top().isClosing(tok)) { + } else if (!groupStack.isEmpty() && groupStack.top().isClosing(tok)) { /* * Close the group. */ @@ -197,7 +195,7 @@ public class SequenceDelimiter { /* Remove nested exclusions from this group. */ final Multiset currentForbidden = forbiddenDelimiters.top(); - for(final T excludedGroup : closed.getNestingExclusions()) { + for (final T excludedGroup : closed.getNestingExclusions()) { currentForbidden.remove(excludedGroup); whoForbid.remove(excludedGroup); @@ -205,18 +203,18 @@ public class SequenceDelimiter { /* Remove the nested opens from this group. */ final Multimap currentAllowed = allowedDelimiters.top(); - for(final Entry closer : closed.getNestingOpeners().entrySet()) { + for (final Entry closer : closed.getNestingOpeners().entrySet()) { currentAllowed.remove(closer.getKey(), closer.getValue()); } /* * Handle 'forgetful' groups that reset nesting. */ - if(closed.isForgetful()) { + if (closed.isForgetful()) { allowedDelimiters.drop(); forbiddenDelimiters.drop(); } - } else if(!groupStack.isEmpty() && groupStack.top().marksSubgroup(tok)) { + } else if (!groupStack.isEmpty() && groupStack.top().marksSubgroup(tok)) { /* * Mark a subgroup. */ @@ -230,17 +228,20 @@ public class SequenceDelimiter { /* * Error if not all groups were closed. */ - if(groupStack.size() > 1) { + if (groupStack.size() > 1) { final DelimiterGroup.OpenGroup group = groupStack.top(); - final String closingDelims = StringUtils.toEnglishList(group.getNestingExclusions().toArray(), - false); + final String closingDelims = StringUtils + .toEnglishList(group.getNestingExclusions().toArray(), false); - final String ctxList = StringUtils.toEnglishList(groupStack.toArray(), "then"); + final String ctxList + = StringUtils.toEnglishList(groupStack.toArray(), "then"); - final String fmt = "Unclosed group '%s'. Expected one of %s to close it.\nOpen groups: %n"; + final String fmt + = "Unclosed group '%s'. Expected one of %s to close it.\nOpen groups: %n"; - throw new DelimiterException(String.format(fmt, group.getName(), closingDelims, ctxList)); + throw new DelimiterException( + String.format(fmt, group.getName(), closingDelims, ctxList)); } return groupStack.pop().toTree(chars.root, chars); @@ -254,7 +255,7 @@ public class SequenceDelimiter { /* * Check if a delimiter is locally forbidden. */ - if(groupStack.isEmpty()) { + if (groupStack.isEmpty()) { localForbid = false; } else { localForbid = groupStack.top().excludes(groupName); @@ -267,10 +268,10 @@ public class SequenceDelimiter { * Add a delimiter group. * * @param group - * The delimiter group. + * The delimiter group. */ public void addGroup(final DelimiterGroup group) { - if(group == null) { + if (group == null) { throw new NullPointerException("Group must not be null"); } @@ -281,20 +282,21 @@ public class SequenceDelimiter { * Creates and adds a delimiter group using the provided settings. * * @param openers - * The tokens that open this group + * The tokens that open this group * @param groupName - * The name of the group + * The name of the group * @param closers - * The tokens that close this group + * The tokens that close this group */ - public void addGroup(final T[] openers, final T groupName, @SuppressWarnings("unchecked") final T... closers) { + public void addGroup(final T[] openers, final T groupName, + @SuppressWarnings("unchecked") final T... closers) { final DelimiterGroup group = new DelimiterGroup<>(groupName); group.addClosing(closers); addGroup(group); - for(final T open : openers) { + for (final T open : openers) { group.addOpener(open, groupName); } } @@ -305,13 +307,13 @@ public class SequenceDelimiter { builder.append("SequenceDelimiter ["); - if(groups != null) { + if (groups != null) { builder.append("groups="); builder.append(groups); builder.append(","); } - if(initialGroup != null) { + if (initialGroup != null) { builder.append("initialGroup="); builder.append(initialGroup); } @@ -325,7 +327,7 @@ public class SequenceDelimiter { * Set the initial group of this delimiter. * * @param initialGroup - * The initial group of this delimiter. + * The initial group of this delimiter. */ public void setInitialGroup(final DelimiterGroup initialGroup) { this.initialGroup = initialGroup; diff --git a/base/src/main/java/bjc/utils/parserutils/delims/StringDelimiter.java b/base/src/main/java/bjc/utils/parserutils/delims/StringDelimiter.java index 1f8f166..6035ede 100644 --- a/base/src/main/java/bjc/utils/parserutils/delims/StringDelimiter.java +++ b/base/src/main/java/bjc/utils/parserutils/delims/StringDelimiter.java @@ -16,16 +16,18 @@ public class StringDelimiter extends SequenceDelimiter { * for ease of use for strings. * * @param seq - * The sequence to delimit. + * The sequence to delimit. * * @return The sequence as a tree. * * @throws DelimiterException - * if something went wrong with delimiting the sequence. + * if something went wrong with delimiting the + * sequence. * * @see SequenceDelimiter */ public ITree delimitSequence(final String... seq) throws DelimiterException { - return super.delimitSequence(new SequenceCharacteristics<>("root", "contents", "subgroup"), seq); + return super.delimitSequence( + new SequenceCharacteristics<>("root", "contents", "subgroup"), seq); } } -- cgit v1.2.3