summaryrefslogtreecommitdiff
path: root/RGens/src/main/java/bjc/rgens/newparser/RGrammarBuilder.java
diff options
context:
space:
mode:
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);
}
}