From 44a8d9d2d56a311293ec86ea40df7126748300a1 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Thu, 7 Jun 2018 20:37:51 -0300 Subject: 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 --- .../parser/elements/InlineRuleCaseElement.java | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java') 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 elements; + public final WeightedRandom 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 elements) { - super(ElementType.RULEREF); + IPair, 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); } } -- cgit v1.2.3