diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/InlineRuleCaseElement.java | 3 | ||||
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/SerialCaseElement.java | 30 |
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(" "); + } + } +} |
