summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-08-08 15:28:43 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-08-08 15:28:43 -0300
commit22ab7a4dd6e608b5ef4d30b1d2ba2816a382dd52 (patch)
tree43c8d13367138407e00916ad7509832fc00b9eb8
parente3f1e4ff331e8820eca6fdc9467c7bebeb9e05b8 (diff)
Use levelSplit more
-rw-r--r--src/main/java/bjc/rgens/parser/ConfigLoader.java52
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/CaseElement.java3
-rw-r--r--src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java10
3 files changed, 35 insertions, 30 deletions
diff --git a/src/main/java/bjc/rgens/parser/ConfigLoader.java b/src/main/java/bjc/rgens/parser/ConfigLoader.java
index 6e9da16..ff0dd73 100644
--- a/src/main/java/bjc/rgens/parser/ConfigLoader.java
+++ b/src/main/java/bjc/rgens/parser/ConfigLoader.java
@@ -1,5 +1,7 @@
package bjc.rgens.parser;
+import bjc.utils.funcutils.StringUtils;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
@@ -51,20 +53,18 @@ public class ConfigLoader {
if (ln.startsWith("#")) continue;
- /* Handle mixed whitespace. */
ln = ln.replaceAll("\\s+", " ");
+ String[] parts = StringUtils.levelSplit(ln, " ").toArray(new String[0]);
/* Get line type */
- int typeIdx = ln.indexOf(" ");
- if(typeIdx == -1) {
+ if(parts.length < 1) {
throw new GrammarException("Must specify config line type");
}
- String type = ln.substring(0, typeIdx).trim();
- ln = ln.substring(typeIdx).trim();
+ String type = parts[0];
switch(type) {
case "load":
- loadConfigLine(ln, cfgSet, set, cfgParent);
+ loadConfigLine(parts, cfgSet, set, cfgParent);
break;
default:
throw new GrammarException("Unknown config line type " + type);
@@ -93,31 +93,27 @@ public class ConfigLoader {
return cfgSet;
}
- private static void loadConfigLine(String ln, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
+ private static void loadConfigLine(String[] parts, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
/*
* Get the place where the tag ID ends
*/
- int tagIdx = ln.indexOf(" ");
- if(tagIdx == -1) {
+ if(parts.length < 2) {
throw new GrammarException("Must specify a tag as to what a line is");
}
- String tag = ln.substring(0, tagIdx).trim();
- ln = ln.substring(tagIdx).trim();
+ String tag = parts[1];
/*
* Get the place where the name of the grammar
* ends.
*/
- int nameIdx = ln.indexOf(" ");
- if (nameIdx == -1) {
+ if (parts.length < 3) {
throw new GrammarException("Must specify a name for a loaded object");
}
- String name = ln.substring(0, nameIdx);
- ln = ln.substring(nameIdx).trim();
+ String name = parts[2];
switch(tag) {
case "template":
- loadTemplate(name, ln, cfgSet, set, cfgParent);
+ loadTemplate(name, parts, cfgSet, set, cfgParent);
break;
case "subset":
{
@@ -126,7 +122,7 @@ public class ConfigLoader {
}
case "gram":
case "grammar":
- loadGrammar(name, ln, cfgSet, set, cfgParent);
+ loadGrammar(name, parts, cfgSet, set, cfgParent);
break;
default:
String msg = String.format("Unrecognized tag type '%s'", tag);
@@ -134,8 +130,12 @@ public class ConfigLoader {
}
}
- private static void loadTemplate(String name, String ln, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
- Path path = Paths.get(ln);
+ private static void loadTemplate(String name, String[] parts, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
+ if(parts.length < 4) {
+ throw new GrammarException(String.format("Must specify a path to load template '%s' from", name));
+ }
+
+ Path path = Paths.get(parts[3]);
/*
* Convert from configuration relative path to
@@ -191,8 +191,12 @@ public class ConfigLoader {
}
}
- private static void loadGrammar(String name, String ln, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
- Path path = Paths.get(ln);
+ private static void loadGrammar(String name, String[] parts, ConfigSet cfgSet, RGrammarSet set, Path cfgParent) throws IOException {
+ if(parts.length < 4) {
+ throw new GrammarException(String.format("Must provide a path to load grammar '%s' from", name));
+ }
+
+ Path path = Paths.get(parts[3]);
/*
* Convert from configuration relative path to
@@ -233,9 +237,9 @@ public class ConfigLoader {
* from.
*/
set.loadedFrom.put(name, path.toString());
- } catch (GrammarException gex) {
- String msg = String.format("Error loading template '%s'", path);
- throw new GrammarException(msg, gex);
+ } catch (IOException | GrammarException ex) {
+ String msg = String.format("Error loading grammar '%s'", path);
+ throw new GrammarException(msg, ex);
}
}
}
diff --git a/src/main/java/bjc/rgens/parser/elements/CaseElement.java b/src/main/java/bjc/rgens/parser/elements/CaseElement.java
index f950f6d..386e2b4 100755
--- a/src/main/java/bjc/rgens/parser/elements/CaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/CaseElement.java
@@ -147,7 +147,8 @@ public abstract class CaseElement {
CaseElement base = createElement(parts[0]);
- return new MethodCaseElement(base, Arrays.copyOfRange(parts, 1, parts.length));
+ parts = Arrays.copyOfRange(parts, 1, parts.length);
+ return new MethodCaseElement(base, parts);
} else {
return new RuleCaseElement(rawCase);
}
diff --git a/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java b/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java
index 49375bc..13f58e9 100644
--- a/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/MethodCaseElement.java
@@ -3,7 +3,7 @@ package bjc.rgens.parser.elements;
import bjc.rgens.parser.GenerationState;
import bjc.rgens.parser.GrammarException;
import bjc.rgens.parser.elements.CaseElement;
-import bjc.rgens.parser.methods.MethodElement;
+import bjc.rgens.parser.elements.methods.MethodElement;
import java.util.List;
import java.util.LinkedList;
@@ -14,20 +14,20 @@ public class MethodCaseElement extends CaseElement {
public List<MethodElement> methods;
public MethodCaseElement(CaseElement base, String... rawMethods) {
- this(base, new MethodElement[0]);
+ this.base = base;
// @TODO
//
// Implement this
}
- public MethodCaseElement(CaseElement base, MethodElement... rawMethods) {
+ public MethodCaseElement(CaseElement base, List<MethodElement> rawMethods) {
this.base = base;
methods = new LinkedList<>();
- for(MethodElement elm : rawMethods) {
- methods.add(rawMethods);
+ for(MethodElement method : rawMethods) {
+ methods.add(method);
}
}