package bjc.utils.gen; import bjc.funcdata.FunctionalMap; import bjc.funcdata.IList; /** * A weighted grammar where all the rules have a equal chance of occuring. * * @author ben * * @param * The type of grammar elements to use. */ public class RandomGrammar extends WeightedGrammar { /** Create a new random grammar. */ public RandomGrammar() { rules = new FunctionalMap<>(); } /** * Add cases to a specified rule. * * @param rule * The name of the rule to add cases to. * * @param cases * The cases to add for this rule. */ @SafeVarargs public final void addCases(final E rule, final IList... cases) { for (final IList currentCase : cases) { super.addCase(rule, 1, currentCase); } } /** * Create a rule with the specified name and cases. * * @param rule * The name of the rule to add. * * @param cases * The cases to add for this rule. */ @SafeVarargs public final void makeRule(final E rule, final IList... cases) { super.addRule(rule); for (final IList currentCase : cases) { super.addCase(rule, 1, currentCase); } } /** * Create a rule with the specified name and cases. * * @param rule * The name of the rule to add. * * @param cases * The cases to add for this rule. */ public void makeRule(final E rule, final IList> cases) { if (cases == null) throw new NullPointerException("Cases must not be null"); super.addRule(rule); cases.forEach(currentCase -> super.addCase(rule, 1, currentCase)); } }