diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-05-11 21:11:29 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-05-11 21:11:29 -0400 |
| commit | fd0a1a0a63818fc1098b01b561c636457c1284ba (patch) | |
| tree | b7800a87dba99b8a26c3e101cd3c0b71351c70da /BJC-Utils2/src/main/java/bjc/utils/parserutils | |
| parent | fff6dc5d43539af05ae2679640240b8545b36947 (diff) | |
Minor changes
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/parserutils/RuleBasedConfigReader.java | 28 | ||||
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/parserutils/ShuntingYard.java | 13 |
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; } |
