From 05c9922b30cd0dcd2a452673c2e155215d074b19 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 5 Jun 2018 22:09:23 -0300 Subject: 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 --- .../java/bjc/rgens/parser/GenerationState.java | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/GenerationState.java') 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 rules; /** The rules imported from other grammars. */ - public Map importRules; + public Map importRules; /** The current set of variables. */ public Map vars; - public Map> rlVars; + public Map 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 vs, - Map> rvs, RGrammar gram) { + Map 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 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 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; -- cgit v1.2.3