summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/RGrammarParser.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-03 22:05:29 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-03 22:05:29 -0300
commitec98c72dec67027559cffdd0d75257ef7c426fe1 (patch)
treec787a0efb78c2ae6a1f82bba137461bb150e68bc /src/main/java/bjc/rgens/parser/RGrammarParser.java
parent825d281097d821048f91eaac8dacf335365cb958 (diff)
Weighting part 2
Weighting now has a syntax. Include a {^<weight>} token to set the rule weight
Diffstat (limited to 'src/main/java/bjc/rgens/parser/RGrammarParser.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/RGrammarParser.java16
1 files changed, 11 insertions, 5 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). */