diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-04 21:13:50 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-04 21:13:50 -0300 |
| commit | 9b9ce0c3123d70b9e839084aade4f37eb08e328d (patch) | |
| tree | 613702e05990ca2344b230490acbea6606041c37 | |
| parent | 4809072030d5ce659f38d9756213fca1db1e7f6c (diff) | |
Rule variables pt. 1
Add the capability to store regular/exhaustible rule variables
| -rw-r--r-- | src/main/java/bjc/rgens/parser/GenerationState.java | 10 | ||||
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammar.java | 6 | ||||
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/Rule.java | 20 | ||||
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java | 2 |
4 files changed, 30 insertions, 8 deletions
diff --git a/src/main/java/bjc/rgens/parser/GenerationState.java b/src/main/java/bjc/rgens/parser/GenerationState.java index 7ab55bf..78fce96 100644 --- a/src/main/java/bjc/rgens/parser/GenerationState.java +++ b/src/main/java/bjc/rgens/parser/GenerationState.java @@ -33,6 +33,7 @@ public class GenerationState { */ /** The current set of variables. */ public Map<String, String> vars; + public Map<String, Rule> rlVars; /** * Create a new generation state. @@ -46,10 +47,11 @@ public class GenerationState { * @param vs * The variables to use. */ - public GenerationState(StringBuilder cont, Random rand, Map<String, String> vs, RGrammar gram) { + public GenerationState(StringBuilder cont, Random rand, Map<String, String> vs, Map<String, Rule> rvs, RGrammar gram) { contents = cont; - rnd = rand; - vars = vs; + rnd = rand; + vars = vs; + rlVars = rvs; this.gram = gram; @@ -66,6 +68,6 @@ public class GenerationState { } public GenerationState newBuf() { - return new GenerationState(new StringBuilder(), rnd, vars, gram); + return new GenerationState(new StringBuilder(), rnd, vars, rlVars, gram); } } diff --git a/src/main/java/bjc/rgens/parser/RGrammar.java b/src/main/java/bjc/rgens/parser/RGrammar.java index bd289e9..6b17173 100755 --- a/src/main/java/bjc/rgens/parser/RGrammar.java +++ b/src/main/java/bjc/rgens/parser/RGrammar.java @@ -108,7 +108,7 @@ public class RGrammar { * @return A possible string from the grammar. */ public String generate(String startRule) { - return generate(startRule, new Random(), new HashMap<>()); + return generate(startRule, new Random(), new HashMap<>(), new HashMap<>()); } /** @@ -126,8 +126,8 @@ public class RGrammar { * * @return A possible string from the grammar. */ - public String generate(String startRule, Random rnd, Map<String, String> vars) { - return generate(startRule, new GenerationState(new StringBuilder(), rnd, vars, this)); + public String generate(String startRule, Random rnd, Map<String, String> vars, Map<String, Rule> rlVars) { + return generate(startRule, new GenerationState(new StringBuilder(), rnd, vars, rlVars, this)); } /** diff --git a/src/main/java/bjc/rgens/parser/Rule.java b/src/main/java/bjc/rgens/parser/Rule.java index 3e7d884..b5a87c3 100755 --- a/src/main/java/bjc/rgens/parser/Rule.java +++ b/src/main/java/bjc/rgens/parser/Rule.java @@ -199,4 +199,24 @@ public class Rule { public void endRecur() { if(currentRecur > 0) currentRecur -= 1; } + + public Rule exhaust() { + Rule rl = new Rule(name); + + rl.cases = cases.exhaustible(); + + rl.prob = prob; + + rl.descentFactor = descentFactor; + + rl.target = target; + rl.bound = bound; + rl.trials = trials; + + rl.recurLimit = recurLimit; + /* @NOTE Is this the right thing to do? */ + rl.currentRecur = 0; + + return rl; + } } diff --git a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java index 66c0296..c299963 100755 --- a/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/RuleCaseElement.java @@ -51,7 +51,7 @@ public abstract class RuleCaseElement extends StringCaseElement { newState.swapGrammar(dst); /* :Postprocessing */ - newState.contents = new StringBuilder(dst.generate(actName, state.rnd, state.vars)); + newState.contents = new StringBuilder(dst.generate(actName, state.rnd, state.vars, state.rlVars)); } else { /* * @TODO 5/29/18 Ben Culkin :RuleSuggesting |
