summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarParser.java16
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarSet.java11
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. */