summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-04 21:13:50 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-04 21:13:50 -0300
commit9b9ce0c3123d70b9e839084aade4f37eb08e328d (patch)
tree613702e05990ca2344b230490acbea6606041c37 /src/main/java/bjc/rgens/parser
parent4809072030d5ce659f38d9756213fca1db1e7f6c (diff)
Rule variables pt. 1
Add the capability to store regular/exhaustible rule variables
Diffstat (limited to 'src/main/java/bjc/rgens/parser')
-rw-r--r--src/main/java/bjc/rgens/parser/GenerationState.java10
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammar.java6
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/Rule.java20
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/RuleCaseElement.java2
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