package bjc.rgens.parser.elements; import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.RGrammarParser; import bjc.utils.data.ITree; import bjc.utils.data.Tree; import bjc.utils.funcdata.FunctionalList; import bjc.utils.funcutils.StringUtils; import bjc.utils.gen.WeightedRandom; import java.util.ArrayList; import java.util.List; public class InlineRuleCaseElement extends CaseElement { public final WeightedRandom elements; public InlineRuleCaseElement(String... parts) { this(new Tree<>(), parts); } public InlineRuleCaseElement(ITree errs, 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}; } List elms = new ArrayList<>(); int prob = RGrammarParser.parseElementString(partArr, elms, errs); for(CaseElement elm : elms) { elements.addProbability(prob, elm); } } } public void generate(GenerationState state) { elements.generateValue(state.rnd).generate(state); } }