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.funcutils.StringUtils; import bjc.utils.gen.WeightedRandom; public class InlineRuleCaseElement extends CaseElement { public final WeightedRandom elements; public InlineRuleCaseElement(String... parts) { super(true); this.elements = new WeightedRandom<>(); for(String part : parts) { String[] partArr; if(StringUtils.levelContains(part, "|")) { partArr = StringUtils.levelSplit(part, "||").toArray(new String[0]); } else { partArr = new String[] {part}; } IPair, Integer> par = RGrammarParser.parseElementString(partArr); int prob = par.getRight(); for(CaseElement elm : par.getLeft()) { elements.addProbability(prob, elm); } } } public void generate(GenerationState state) { elements.generateValue(state.rnd).generate(state); } }