From 5c416488ef63b5004ca424de56894eb17712f116 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Sun, 3 Jun 2018 23:59:30 -0300 Subject: Add recurrance limit This controls the number of times a rule can be entered into during a single generations, and is set to 5 by default --- .../bjc/rgens/parser/elements/ExpVariableCaseElement.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java') diff --git a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java index 8598fbd..9c5ad1b 100755 --- a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java @@ -2,7 +2,9 @@ package bjc.rgens.parser.elements; import bjc.rgens.parser.GenerationState; import bjc.rgens.parser.GrammarException; +import bjc.rgens.parser.RecurLimitException; import bjc.rgens.parser.RGrammar; +import bjc.rgens.parser.Rule; import bjc.rgens.parser.RuleCase; public class ExpVariableCaseElement extends VariableCaseElement { @@ -15,9 +17,17 @@ public class ExpVariableCaseElement extends VariableCaseElement { GenerationState newState = state.newBuf(); if (state.rules.containsKey(varDef)) { - RuleCase destCase = state.rules.get(varDef).getCase(); + Rule rl = state.rules.get(varDef); - state.gram.generateCase(destCase, newState); + if(rl.doRecur()) { + RuleCase destCase = state.rules.get(varDef).getCase(); + + state.gram.generateCase(destCase, newState); + + rl.endRecur(); + } else { + throw new RecurLimitException("Rule recurrence limit exceeded"); + } } else if (state.importRules.containsKey(varDef)) { RGrammar destGrammar = state.importRules.get(varDef); @@ -40,6 +50,5 @@ public class ExpVariableCaseElement extends VariableCaseElement { } state.vars.put(varName, newState.contents.toString()); - } } -- cgit v1.2.3