summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-07 20:37:51 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-07 20:37:51 -0300
commit44a8d9d2d56a311293ec86ea40df7126748300a1 (patch)
treecc53c34a97a403ddb4a8d112f09124ee42c4507a /src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
parent7422af49fa5c4da57323abe676a99468d401c44b (diff)
Refactoring
The main refactoring here is removing the type field from the various classes, but there are a few other smaller ones. This also contains the grounds for a refactoring on variable use
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
index 6cb0ce3..ea22bb4 100644
--- a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
@@ -3,23 +3,38 @@ package bjc.rgens.parser.elements;
import bjc.rgens.parser.GenerationState;
import bjc.rgens.parser.RGrammarParser;
+import bjc.utils.data.IPair;
import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.IList;
+import bjc.utils.gen.WeightedRandom;
public class InlineRuleCaseElement extends CaseElement {
- public final IList<CaseElement> elements;
+ public final WeightedRandom<CaseElement> elements;
- public InlineRuleCaseElement(String... elements) {
- this(RGrammarParser.parseElementString(elements).getLeft());
- }
+ public InlineRuleCaseElement(String... parts) {
+ super(true);
+
+ this.elements = new WeightedRandom<>();
+
+ for(String part : parts) {
+ String[] partArr;
+
+ if(part.contains("|")) {
+ partArr = part.split("\\|");
+ } else {
+ partArr = new String[] {part};
+ }
- public InlineRuleCaseElement(IList<CaseElement> elements) {
- super(ElementType.RULEREF);
+ IPair<IList<CaseElement>, Integer> par = RGrammarParser.parseElementString(partArr);
+ int prob = par.getRight();
- this.elements = elements;
+ for(CaseElement elm :par.getLeft()) {
+ elements.addProbability(prob, elm);
+ }
+ }
}
public void generate(GenerationState state) {
- elements.randItem(state.rnd::nextInt).generate(state);
+ elements.generateValue(state.rnd).generate(state);
}
}