summaryrefslogtreecommitdiff
path: root/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-10-24 19:29:04 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-10-24 19:29:04 -0300
commitd6a2f1faa5d2f2009afe37a17b3c18faa2d79a0e (patch)
tree13efb0414aeb9bb9b4d90f6f62878a9cfcf69a5d /RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
parente1f4d1f3fc86b67e82684d196d3948a13794d35f (diff)
Add a possible solution to :Spacing?
Diffstat (limited to 'RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java')
-rw-r--r--RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java66
1 files changed, 62 insertions, 4 deletions
diff --git a/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java b/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
index 4e9f9e1..a6b21a5 100644
--- a/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
+++ b/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
@@ -128,12 +128,32 @@ public class RGrammarBuilder {
throw new NullPointerException("Rule name must not be null");
} else if (ruleName.equals("")) {
throw new IllegalArgumentException("The empty string is not a valid rule name");
+ } else if(!rules.containsKey(ruleName)) {
+ String msg = String.format("Rule '%s' is not a valid rule name.");
+
+ throw new IllegalArgumentException(msg);
}
CaseElement element = CaseElement.createElement(suffix);
- for (RuleCase ruleCase : rules.get(ruleName).getCases()) {
- ruleCase.getElements().add(element);
+ FunctionalList<RuleCase> newCases = new FunctionalList<>();
+
+ IList<RuleCase> caseList = rules.get(ruleName).getCases();
+ for (RuleCase ruleCase : caseList) {
+ FunctionalList<CaseElement> newCase = new FunctionalList<>();
+
+ for(CaseElement elm : ruleCase.getElements()) {
+ newCase.add(elm);
+ }
+
+ newCase.add(element);
+
+ newCases.add(new RuleCase(NORMAL, newCase));
+ }
+
+
+ for (RuleCase newCase : newCases) {
+ caseList.add(newCase);
}
}
@@ -155,12 +175,50 @@ public class RGrammarBuilder {
throw new NullPointerException("Rule name must not be null");
} else if (ruleName.equals("")) {
throw new IllegalArgumentException("The empty string is not a valid rule name");
+ } else if(!rules.containsKey(ruleName)) {
+ String msg = String.format("Rule '%s' is not a valid rule name.");
+
+ throw new IllegalArgumentException(msg);
}
CaseElement element = CaseElement.createElement(prefix);
- for (RuleCase ruleCase : rules.get(ruleName).getCases()) {
- ruleCase.getElements().add(element);
+ FunctionalList<RuleCase> newCases = new FunctionalList<>();
+
+ IList<RuleCase> caseList = rules.get(ruleName).getCases();
+ for (RuleCase ruleCase : caseList) {
+ FunctionalList<CaseElement> newCase = new FunctionalList<>();
+
+ newCase.add(element);
+
+ for(CaseElement elm : ruleCase.getElements()) {
+ newCase.add(elm);
+ }
+
+ newCases.add(new RuleCase(NORMAL, newCase));
}
+
+
+ for (RuleCase newCase : newCases) {
+ caseList.add(newCase);
+ }
+ }
+
+ public void despaceRule(String ruleName) {
+ if (ruleName == null) {
+ throw new NullPointerException("ruleName must not be null");
+ } else if (ruleName.equals("")) {
+ throw new IllegalArgumentException("The empty string is not a valid rule name");
+ }
+
+ IList<RuleCase> caseList = rules.get(ruleName).getCases();
+
+ IList<RuleCase> newCaseList = new FunctionalList<>();
+
+ for(RuleCase cse : caseList) {
+ newCaseList.add(new RuleCase(SPACEFLATTEN, cse.getElements()));
+ }
+
+ rules.get(ruleName).replaceCases(newCaseList);
}
}