diff options
| author | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-21 19:42:12 -0400 |
|---|---|---|
| committer | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-21 19:42:12 -0400 |
| commit | 2cc00686b50d5a28f0ab04ad52e5b075290698d9 (patch) | |
| tree | 9157f35c50dd12acd87bacb4f30c8d018703adb5 /RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java | |
| parent | 5444cd4db8a0fa41d25cd303c1145cadd112e12f (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.java | 14 |
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)); } |
