summaryrefslogtreecommitdiff
path: root/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
diff options
context:
space:
mode:
authorbjculkin <bjculkin@mix.wvu.edu>2017-03-21 19:42:12 -0400
committerbjculkin <bjculkin@mix.wvu.edu>2017-03-21 19:42:12 -0400
commit2cc00686b50d5a28f0ab04ad52e5b075290698d9 (patch)
tree9157f35c50dd12acd87bacb4f30c8d018703adb5 /RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
parent5444cd4db8a0fa41d25cd303c1145cadd112e12f (diff)
Add ranges
Ranges can now be used with the syntax [start..end] inline to generate numbers instead of having to create a special rule for them.
Diffstat (limited to 'RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java')
-rw-r--r--RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java b/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
index fb8003a..52304f5 100644
--- a/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
+++ b/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
@@ -18,6 +18,8 @@ import static bjc.rgens.newparser.RuleCase.CaseType.*;
*
*/
public class RGrammarBuilder {
+ private static final String RANGE_CASELM = "\\[\\d+\\.\\.\\d+\\]";
+
private static final String REFER_CASELEM = "\\[[^\\]]+\\]";
private static final String SPECIAL_CASELEM = "{[^}]}";
@@ -100,7 +102,19 @@ public class RGrammarBuilder {
* Handle other cases.
*/
} else if(csepart.matches(REFER_CASELEM)) {
+ if(csepart.matches(RANGE_CASELM)) {
+ /*
+ * Handle ranges
+ */
+ String rawRange = csepart.substring(1, csepart.length() - 1);
+
+ int firstNum = Integer.parseInt(rawRange.substring(0, rawRange.indexOf('.')));
+ int secondNum = Integer.parseInt(rawRange.substring(rawRange.lastIndexOf('.') + 1));
+
+ currentCase.add(new CaseElement(RANGE, firstNum, secondNum));
+ } else {
currentCase.add(new CaseElement(RULEREF, csepart));
+ }
} else {
currentCase.add(new CaseElement(LITERAL, csepart));
}