diff options
| author | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-22 08:49:53 -0400 |
|---|---|---|
| committer | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-22 08:49:53 -0400 |
| commit | 9c1c8bba103d35eb9abeeba6b3ce8633ec10f9e7 (patch) | |
| tree | 25a757c6535ccb8f8bad485386a868640f39e0fc /RGens/src/main/java/bjc/rgens/newparser/CaseElement.java | |
| parent | 9a5a155fbd2c9d87e698f9e25cd504bb2fcacffc (diff) | |
Update
This adds suffixing
Diffstat (limited to 'RGens/src/main/java/bjc/rgens/newparser/CaseElement.java')
| -rw-r--r-- | RGens/src/main/java/bjc/rgens/newparser/CaseElement.java | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/RGens/src/main/java/bjc/rgens/newparser/CaseElement.java b/RGens/src/main/java/bjc/rgens/newparser/CaseElement.java index 2eb2e3a..7d04156 100644 --- a/RGens/src/main/java/bjc/rgens/newparser/CaseElement.java +++ b/RGens/src/main/java/bjc/rgens/newparser/CaseElement.java @@ -1,5 +1,9 @@ package bjc.rgens.newparser; +import static bjc.rgens.newparser.CaseElement.ElementType.LITERAL; +import static bjc.rgens.newparser.CaseElement.ElementType.RANGE; +import static bjc.rgens.newparser.CaseElement.ElementType.RULEREF; + /** * A element in a rule case. * @@ -27,10 +31,14 @@ public class CaseElement { RANGE; } + private static final String SPECIAL_CASELEM = "\\{[^}]\\}"; + private static final String REFER_CASELEM = "\\[[^\\]]+\\]"; + private static final String RANGE_CASELM = "\\[\\d+\\.\\.\\d+\\]"; + /** * The type of this element. */ - public final CaseElement.ElementType type; + public final ElementType type; /** * The literal string value of this element. @@ -225,4 +233,42 @@ public class CaseElement { return String.format("Unknown type '%s'", type); } } + + /** + * Create a case element from a string. + * + * @param csepart + * The string to convert. + * + * @return A case element representing the string. + */ + public static CaseElement createElement(String csepart) { + if(csepart == null) { + throw new NullPointerException("Case part cannot be null"); + } + + if(csepart.matches(CaseElement.SPECIAL_CASELEM)) { + /* + * Handle other cases. + */ + } else if(csepart.matches(CaseElement.REFER_CASELEM)) { + if(csepart.matches(CaseElement.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)); + + return new CaseElement(RANGE, firstNum, secondNum); + } else { + return new CaseElement(RULEREF, csepart); + } + } else { + return new CaseElement(LITERAL, csepart); + } + + throw new IllegalArgumentException(String.format("Unknown case part '%s'")); + } }
\ No newline at end of file |
