summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/GenerationState.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 22:09:23 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 22:09:23 -0300
commit05c9922b30cd0dcd2a452673c2e155215d074b19 (patch)
tree80f2cc1cfd239761f3d74d20159f780c1673781b /src/main/java/bjc/rgens/parser/GenerationState.java
parentf25d1062a56a81b17348b799e6d4d7e1dc12a1cc (diff)
Templates pt. 3
Templates should now work, though there is no syntax to reference them from rules yet In addition, several internal things have been changed so as to improve code quality
Diffstat (limited to 'src/main/java/bjc/rgens/parser/GenerationState.java')
-rw-r--r--src/main/java/bjc/rgens/parser/GenerationState.java27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/main/java/bjc/rgens/parser/GenerationState.java b/src/main/java/bjc/rgens/parser/GenerationState.java
index 38a25d5..f5cbc60 100644
--- a/src/main/java/bjc/rgens/parser/GenerationState.java
+++ b/src/main/java/bjc/rgens/parser/GenerationState.java
@@ -3,6 +3,7 @@ package bjc.rgens.parser;
import bjc.utils.data.IPair;
import bjc.utils.data.Pair;
+import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@@ -21,11 +22,13 @@ public class GenerationState {
/** The rules of the grammar. */
public Map<String, Rule> rules;
/** The rules imported from other grammars. */
- public Map<String, RGrammar> importRules;
+ public Map<String, Rule> importRules;
/** The current set of variables. */
public Map<String, String> vars;
- public Map<String, IPair<RGrammar, Rule>> rlVars;
+ public Map<String, Rule> rlVars;
+
+ private static final Random BASE = new Random();
/**
* Create a new generation state.
@@ -40,7 +43,7 @@ public class GenerationState {
* The variables to use.
*/
public GenerationState(StringBuilder cont, Random rand, Map<String, String> vs,
- Map<String, IPair<RGrammar, Rule>> rvs, RGrammar gram) {
+ Map<String, Rule> rvs, RGrammar gram) {
contents = cont;
rnd = rand;
vars = vs;
@@ -52,6 +55,14 @@ public class GenerationState {
this.importRules = gram.getImportRules();
}
+ public static GenerationState fromGrammar(RGrammar gram) {
+ return fromGrammar(BASE, gram);
+ }
+
+ public static GenerationState fromGrammar(Random rand, RGrammar gram) {
+ return new GenerationState(new StringBuilder(), rand, new HashMap<>(), new HashMap<>(), gram);
+ }
+
public void swapGrammar(RGrammar gram) {
if(this.gram == gram) return;
@@ -73,9 +84,9 @@ public class GenerationState {
* they are importing the rule from, so as to make it clear which rules
* are imported, and which aren't
*/
- public IPair<RGrammar, Rule> findRule(String ruleName, boolean allowImports) {
+ public Rule findRule(String ruleName, boolean allowImports) {
if(rules.containsKey(ruleName)) {
- return new Pair<>(gram, rules.get(ruleName));
+ return rules.get(ruleName);
}
if(allowImports) return findImport(ruleName);
@@ -83,11 +94,9 @@ public class GenerationState {
return null;
}
- public IPair<RGrammar, Rule> findImport(String ruleName) {
+ public Rule findImport(String ruleName) {
if(importRules.containsKey(ruleName)) {
- RGrammar imp = importRules.get(ruleName);
-
- return new Pair<>(imp, imp.rules.get(ruleName));
+ return importRules.get(ruleName);
}
return null;