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 --- src/main/java/bjc/rgens/parser/RGrammarParser.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (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 9232013..827cbb6 100755 --- a/src/main/java/bjc/rgens/parser/RGrammarParser.java +++ b/src/main/java/bjc/rgens/parser/RGrammarParser.java @@ -81,6 +81,20 @@ public class RGrammarParser { } }); + pragmas.put("recur-limit", (body, build, level) -> { + String[] parts = body.split(" "); + + if(parts.length != 2) { + throw new GrammarException("Recur-limit pragma takes two arguments: the name of the rule to set the limit for, and the new value of the limit"); + } + + if(!parts[1].matches("\\A\\d+\\Z")) { + throw new GrammarException("Limit value must be an integer"); + } + + build.setRuleRecur(parts[0], Integer.parseInt(parts[1])); + }); + pragmas.put("regex-rule", (body, build, level) -> { int nameIndex = body.indexOf(" "); -- cgit v1.2.3