From ec98c72dec67027559cffdd0d75257ef7c426fe1 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Sun, 3 Jun 2018 22:05:29 -0300 Subject: Weighting part 2 Weighting now has a syntax. Include a {^} token to set the rule weight --- src/main/java/bjc/rgens/parser/RGrammarParser.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/RGrammarParser.java') 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 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). */ -- cgit v1.2.3