summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java41
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);
+ }
+}