diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java new file mode 100644 index 0000000..917dd33 --- /dev/null +++ b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java @@ -0,0 +1,41 @@ +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<CaseElement> 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<IList<CaseElement>, 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); + } +} |
