diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-03 22:05:29 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-03 22:05:29 -0300 |
| commit | ec98c72dec67027559cffdd0d75257ef7c426fe1 (patch) | |
| tree | c787a0efb78c2ae6a1f82bba137461bb150e68bc /src/main/java | |
| parent | 825d281097d821048f91eaac8dacf335365cb958 (diff) | |
Weighting part 2
Weighting now has a syntax. Include a {^<weight>} token to set the rule
weight
Diffstat (limited to 'src/main/java')
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammarParser.java | 16 | ||||
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/RGrammarSet.java | 11 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/main/java/bjc/rgens/parser/RGrammarParser.java b/src/main/java/bjc/rgens/parser/RGrammarParser.java index b2499f9..9232013 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarParser.java +++ b/src/main/java/bjc/rgens/parser/RGrammarParser.java @@ -348,17 +348,23 @@ public class RGrammarParser { private static void handleRuleCase(String cse, RGrammarBuilder build, Rule rul) { IList<CaseElement> caseParts = new FunctionalList<>(); + int weight = 1; + for (String csepart : cse.split(" ")) { String partToAdd = csepart.trim(); - /* Ignore empty parts */ - if (partToAdd.equals("")) + if (partToAdd.equals("")) { + /* Ignore empty parts */ continue; - - caseParts.add(CaseElement.createElement(partToAdd)); + } else if(partToAdd.matches("\\{\\^\\d+\\}")) { + /* Set case weights */ + weight = Integer.parseInt(partToAdd.substring(2, partToAdd.length() - 1)); + } else { + caseParts.add(CaseElement.createElement(partToAdd)); + } } - rul.addCase(new NormalRuleCase(caseParts)); + rul.addCase(new NormalRuleCase(caseParts), weight); } /* Handle a where block (a block with local rules). */ diff --git a/src/main/java/bjc/rgens/parser/RGrammarSet.java b/src/main/java/bjc/rgens/parser/RGrammarSet.java index ad9836f..d734074 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarSet.java +++ b/src/main/java/bjc/rgens/parser/RGrammarSet.java @@ -30,14 +30,15 @@ public class RGrammarSet { private Map<String, String> loadedFrom; public static final boolean PERF = true; + public static final boolean DEBUG = true; /** Create a new set of randomized grammars. */ public RGrammarSet() { grammars = new HashMap<>(); - exportedRules = new HashMap<>(); + exportedRules = new TreeMap<>(); - exportFrom = new TreeMap<>(); + exportFrom = new HashMap<>(); loadedFrom = new HashMap<>(); } @@ -67,9 +68,15 @@ public class RGrammarSet { /* Process exports from the grammar. */ for (Rule export : gram.getExportedRules()) { + if(exportedRules.containsKey(export.name)) + System.err.printf("WARN: Shadowing rule %s in %s from %s\n", export.name, exportFrom.get(export.name), grammarName); + exportedRules.put(export.name, gram); exportFrom.put(export.name, grammarName); + + if(DEBUG) + System.err.printf("\t\tDEBUG: %s exported from %s\n", export.name, grammarName); } /* Add exports to grammar. */ |
