def __init__(self, name, *values, **options):
self.name = name<EOL>self.options = options<EOL>self.values = list(values)<EOL>self.sep = self.options.setdefault("<STR_LIT>", self.sep)<EOL>self.cat = self.options.setdefault("<STR_LIT>", self.cat)<EOL>self.no_prune = self.options.setdefault("<STR_LIT>", self.no_prune)<EOL>self.fuzzer = GramFuzzer.instance()<EOL>frame,mod_path,_,_,_,_ = inspect.stack()[<NUM_LIT:1>]<EOL>module_name = os.path.basename(mod_path).replace("<STR_LIT>", "<STR_LIT>").replace("<STR_LIT>", "<STR_LIT>")<EOL>if "<STR_LIT>" in frame.f_locals:<EOL><INDENT>self.fuzzer.cat_group_defaults[module_name] = frame.f_locals["<STR_LIT>"]<EOL><DEDENT>self.fuzzer.add_definition(self.cat, self.name, self, no_prune=self.no_prune, gram_file=module_name)<EOL>
Create a new rule definition. Simply instantiating a new rule definition
        will add it to the current ``GramFuzzer`` instance.

        :param str name: The name of the rule being defined
        :param list values: The list of values that define the value of the rule
            (will be concatenated when built)
        :param str cat: The category to create the rule in (default=``"default"``).
        :param bool no_prune: If this rule should not be pruned *EVEN IF* it is found to be
            unreachable (default=``False``)