diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-04 00:01:38 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-04 00:01:38 -0300 |
| commit | 2c842ce759095879036bb93321a528f83b77d1ee (patch) | |
| tree | 00b99aa54fb4066ee93a243a083080d970137503 /src/main/java/bjc/rgens/parser/elements | |
| parent | 5c416488ef63b5004ca424de56894eb17712f116 (diff) | |
Add syntax features
This adds a few new syntax features, as well as allowing certain ones to
be used in pragmas.
The next syntax feature to be added will be some sort of quote feature,
to allow the inclusion of spaces where they would otherwise not be
permitted
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(" "); + } + } +} |
