diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-05 14:54:12 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-09-05 14:54:12 -0300 |
| commit | 15f0bf5207df703ffbb53c18a147b440dcf43546 (patch) | |
| tree | 587a58ae6a09a2c63af6f62111211e029f868b05 /src/main/java/bjc/rgens/parser/GenerationState.java | |
| parent | dee4d326c7ab5b353813877e452cd72103e644b0 (diff) | |
Make variable fields private
This makes the two maps in GenerationState private. Use the
defineVar/findVar or defineRuleVar/findRuleVar instead.
This is another change on the way to doing autovivify
Diffstat (limited to 'src/main/java/bjc/rgens/parser/GenerationState.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/GenerationState.java | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/main/java/bjc/rgens/parser/GenerationState.java b/src/main/java/bjc/rgens/parser/GenerationState.java index 382fba3..ebe7ca4 100644 --- a/src/main/java/bjc/rgens/parser/GenerationState.java +++ b/src/main/java/bjc/rgens/parser/GenerationState.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Random; +import static bjc.rgens.parser.RGrammarLogging.*; /* * The current state during generation. * @@ -21,13 +22,13 @@ public class GenerationState { /** The current grammar. */ public RGrammar gram; /** The rules of the grammar. */ - public Map<String, Rule> rules; + private Map<String, Rule> rules; /** The rules imported from other grammars. */ - public Map<String, Rule> importRules; + private Map<String, Rule> importRules; /** The current set of variables. */ - public MapSet<String, String> vars; - public MapSet<String, Rule> rlVars; + private MapSet<String, String> vars; + private MapSet<String, Rule> rlVars; private static final Random BASE = new Random(); @@ -109,4 +110,32 @@ public class GenerationState { return null; } + + public void defineVar(String name, String val) { + if(vars.containsKey(name)) + warn("Shadowing variable %s with value %s (old value %s)", name, vars.get(name), val); + + vars.put(name, val); + } + + public void defineRuleVar(String name, Rule rle) { + if(rlVars.containsKey(name)) + warn("Shadowing rule variable %s with value %s (old value %s)", name, rlVars.get(name), rle); + + rlVars.put(name, rle); + } + + public String findVar(String name, GenerationState stat) { + if(!vars.containsKey(name)) + throw new GrammarException(String.format("Variable %s not defined", name)); + + return vars.get(name); + } + + public Rule findRuleVar(String name, GenerationState stat) { + if(!rlVars.containsKey(name)) + throw new GrammarException(String.format("Rule variable %s not defined", name)); + + return rlVars.get(name); + } } |
