From eac274292f7053560d0f087acc182a5fcd86b162 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 5 Jun 2018 12:12:08 -0300 Subject: Minor bug-fixes --- src/main/java/bjc/rgens/parser/RGrammarBuilder.java | 4 ++-- .../java/bjc/rgens/parser/elements/CaseElement.java | 20 ++++++++++---------- .../parser/elements/RuleVariableCaseElement.java | 6 ++++++ 3 files changed, 18 insertions(+), 12 deletions(-) (limited to 'src/main/java/bjc') diff --git a/src/main/java/bjc/rgens/parser/RGrammarBuilder.java b/src/main/java/bjc/rgens/parser/RGrammarBuilder.java index 59f3a4c..453be05 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarBuilder.java +++ b/src/main/java/bjc/rgens/parser/RGrammarBuilder.java @@ -272,7 +272,7 @@ public class RGrammarBuilder { newCaseList.add(new Pair<>(cse.getLeft(), new FlatRuleCase(cse.getRight().getElements()))); } - System.err.printf("\tTRACE: Despacing %d cases of rule %s\n", caseList.getSize(), ruleName); + System.err.printf("\t\tTRACE: Despacing %d cases of rule %s\n", caseList.getSize(), ruleName); rules.get(ruleName).replaceCases(newCaseList); } @@ -395,7 +395,7 @@ public class RGrammarBuilder { } for(List permute : ListUtils.permuteList(stor)) { - System.err.printf("\tTRACE: generated permute "); + System.err.printf("\t\tTRACE: generated permute "); for(T elm : permute) { System.err.printf("%s ", elm); } diff --git a/src/main/java/bjc/rgens/parser/elements/CaseElement.java b/src/main/java/bjc/rgens/parser/elements/CaseElement.java index 5263d03..d86d2d3 100755 --- a/src/main/java/bjc/rgens/parser/elements/CaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/CaseElement.java @@ -103,9 +103,9 @@ public abstract class CaseElement { /* Trim $ */ return new LitVariableCaseElement(parts[0].substring(1), parts[1]); - } else if (specialBody.matches("\\@\\S+=\\S+")) { - /* Handle rule variable definitions. */ - String[] parts = specialBody.split("="); + } else if (specialBody.matches("\\@\\S+:=\\S+")) { + /* Handle exhaustible rule variable definitions. */ + String[] parts = specialBody.split(":="); if (parts.length != 2) { String msg = "Rule variables must be a name and a definition, seperated by ="; @@ -114,9 +114,9 @@ public abstract class CaseElement { } /* Trim $ */ - return new RuleVariableCaseElement(parts[0].substring(1), parts[1], false); - } else if (specialBody.matches("\\@\\S+:=\\S+")) { - /* Handle exhaustible rule variable definitions. */ + return new RuleVariableCaseElement(parts[0].substring(1), parts[1], true); + } else if (specialBody.matches("\\@\\S+=\\S+")) { + /* Handle rule variable definitions. */ String[] parts = specialBody.split("="); if (parts.length != 2) { @@ -126,7 +126,7 @@ public abstract class CaseElement { } /* Trim $ */ - return new RuleVariableCaseElement(parts[0].substring(1), parts[1], true); + return new RuleVariableCaseElement(parts[0].substring(1), parts[1], false); } else if (specialBody.matches("empty")) { /* Literal blank, for empty cases. */ return new BlankCaseElement(); @@ -144,7 +144,7 @@ public abstract class CaseElement { } else if(rawCase.contains("|")) { String[] elms = rawCase.split("\\|"); - System.err.printf("\tTRACE: Split inline cases %s to ", rawCase); + System.err.printf("\t\tTRACE: Split inline cases %s to ", rawCase); for(String elm : elms) { System.err.printf("%s, ", elm); } @@ -165,14 +165,14 @@ public abstract class CaseElement { return new VariableRuleReference(csepart); } else if(csepart.contains("@")) { // Trim @ - return new RuleVarRefCaseElement(csepart.substring(1)); + return new RuleVarRefCaseElement(rawCase.substring(1)); } else { return new NormalRuleReference(csepart); } } else if(csepart.startsWith("%")) { String rName = String.format("[%s]", csepart.substring(1)); - System.err.printf("\tTRACE: short ref to %s (%s)\n", rName, csepart); + System.err.printf("\t\tTRACE: short ref to %s (%s)\n", rName, csepart); return new NormalRuleReference(rName); } else { diff --git a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java index 55a1c1e..d4c677b 100644 --- a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java @@ -42,5 +42,11 @@ public class RuleVariableCaseElement extends VariableCaseElement { } state.rlVars.put(varName, new Pair<>(grm, rl)); + + if(exhaust) { + System.err.printf("\t\tTRACE: Defined exhausted rulevar '%s' ('%s')\n", varName, varDef); + } else { + System.err.printf("\t\tTRACE: Defined rulevar '%s' ('%s')\n", varName, varDef); + } } } -- cgit v1.2.3