package bjc.utils.gen; import java.util.HashMap; import bjc.utils.funcdata.FunctionalList; /** * 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 HashMap<>(); } /** * 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(E rule, FunctionalList... cases) { for (FunctionalList 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(E rule, FunctionalList... cases) { super.addRule(rule); for (FunctionalList 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(E rule, FunctionalList> cases) { super.addRule(rule); cases.forEach(currentCase -> super.addCase(rule, 1, currentCase)); } }