summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/parserutils
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java28
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java13
2 files changed, 20 insertions, 21 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java
index 2b97a79..5d044e1 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java
@@ -8,7 +8,9 @@ import java.util.Scanner;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
+import bjc.utils.data.IHolder;
import bjc.utils.data.IPair;
+import bjc.utils.data.Identity;
import bjc.utils.data.Pair;
import bjc.utils.exceptions.UnknownPragmaException;
import bjc.utils.funcdata.FunctionalStringTokenizer;
@@ -121,30 +123,30 @@ public class RuleBasedConfigReader<E> {
E state;
- try (Scanner inputSource = new Scanner(inputStream)) {
+ try (Scanner inputSource = new Scanner(inputStream, "\n")) {
state = initialState;
- boolean ruleOpen = false;
-
- while (inputSource.hasNextLine()) {
- String line = inputSource.nextLine();
+ IHolder<Boolean> ruleOpen = new Identity<>(false);
+ inputSource.forEachRemaining((line) -> {
if (line.startsWith("#") || line.startsWith("//")) {
// It's a comment
- continue;
+ return;
} else if (line.equals("")) {
- ruleOpen = endRule(state, ruleOpen);
+ ruleOpen.replace(endRule(state, ruleOpen.getValue()));
- continue;
+ return;
} else if (line.startsWith("\t")) {
- continueRule(state, ruleOpen, line);
+ continueRule(state, ruleOpen.getValue(), line);
} else {
- ruleOpen = startRule(state, ruleOpen, line);
+ ruleOpen.replace(
+ startRule(state, ruleOpen.getValue(), line));
}
- }
+ });
}
return state;
+
}
/**
@@ -185,8 +187,8 @@ public class RuleBasedConfigReader<E> {
}
private boolean startRule(E state, boolean ruleOpen, String line) {
- FunctionalStringTokenizer tokenizer = new FunctionalStringTokenizer(
- line, " ");
+ FunctionalStringTokenizer tokenizer =
+ new FunctionalStringTokenizer(line, " ");
String nextToken = tokenizer.nextToken();
diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java
index 8118faa..c1cd5c7 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java
@@ -63,12 +63,11 @@ public class ShuntingYard<TokenType> {
}
private final class TokenShunter implements Consumer<String> {
- private IList<TokenType> output;
+ private IList<TokenType> output;
private Deque<String> stack;
private Function<String, TokenType> transform;
- public TokenShunter(IList<TokenType> outpt,
- Deque<String> stack,
+ public TokenShunter(IList<TokenType> outpt, Deque<String> stack,
Function<String, TokenType> transform) {
this.output = outpt;
this.stack = stack;
@@ -176,8 +175,7 @@ public class ShuntingYard<TokenType> {
* The function to use to transform strings to tokens
* @return A list of tokens in postfix notation
*/
- public IList<TokenType> postfix(
- IList<String> input,
+ public IList<TokenType> postfix(IList<String> input,
Function<String, TokenType> tokenTransformer) {
if (input == null) {
throw new NullPointerException("Input must not be null");
@@ -191,9 +189,8 @@ public class ShuntingYard<TokenType> {
input.forEach(new TokenShunter(output, stack, tokenTransformer));
- while (!stack.isEmpty()) {
- output.add(tokenTransformer.apply(stack.pop()));
- }
+ stack.forEach(
+ (token) -> output.add(tokenTransformer.apply(token)));
return output;
}