summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java3
-rw-r--r--src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java30
2 files changed, 32 insertions, 1 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
index 95bb5f9..6cb0ce3 100644
--- a/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java
@@ -1,6 +1,7 @@
package bjc.rgens.parser.elements;
import bjc.rgens.parser.GenerationState;
+import bjc.rgens.parser.RGrammarParser;
import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.IList;
@@ -9,7 +10,7 @@ public class InlineRuleCaseElement extends CaseElement {
public final IList<CaseElement> elements;
public InlineRuleCaseElement(String... elements) {
- this(new FunctionalList<>(elements).map(CaseElement::createElement));
+ this(RGrammarParser.parseElementString(elements).getLeft());
}
public InlineRuleCaseElement(IList<CaseElement> elements) {
diff --git a/src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java b/src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java
new file mode 100644
index 0000000..594595e
--- /dev/null
+++ b/src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java
@@ -0,0 +1,30 @@
+package bjc.rgens.parser.elements;
+
+import bjc.rgens.parser.GenerationState;
+
+public class SerialCaseElement extends CaseElement {
+ public final CaseElement rep;
+
+ public final int lower;
+ public final int upper;
+
+ public SerialCaseElement(CaseElement rep, int lower, int upper) {
+ super(rep.type);
+
+ this.rep = rep;
+
+ this.lower = lower;
+ this.upper = upper;
+ }
+
+ public void generate(GenerationState state) {
+ int num = state.rnd.nextInt(upper - lower) + lower;
+
+ for(int i = 0; i < num; i++) {
+ rep.generate(state);
+
+ if(rep.type.spacing)
+ state.contents.append(" ");
+ }
+ }
+}