diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-07 20:37:51 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-07 20:37:51 -0300 |
| commit | 44a8d9d2d56a311293ec86ea40df7126748300a1 (patch) | |
| tree | cc53c34a97a403ddb4a8d112f09124ee42c4507a /src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java | |
| parent | 7422af49fa5c4da57323abe676a99468d401c44b (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.java | 31 |
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); } } |
