def __init__(self, grammar: Grammar, generalizer_class: Type = TreeGeneralizer, parser: Optional[Parser] = None, **kwargs: Any) -> None: """Constructor. `grammar` is an input grammar in fuzzingbook format. `generalizer_class` is the tree generalizer class to use (default: `TreeGeneralizer`) `parser` is the parser to use (default: `EarleyParser(grammar)`). All other keyword args are passed to the tree generalizer, notably: `fuzzer` - the fuzzer to use (default: `GrammarFuzzer`), and `log` - enables debugging output if True. """ super().__init__() self.grammar = grammar assert is_valid_grammar(grammar) self.generalizer_class = generalizer_class if parser is None: parser = EarleyParser(grammar) self.parser = parser self.kwargs = kwargs # These save state for further fuzz() calls self.generalized_args: Dict[str, Any] = {} self.generalized_trees: Dict[str, DerivationTree] = {} self.generalizers: Dict[str, TreeGeneralizer] = {}
def __init__(self, grammar: Grammar, tree: DerivationTree, fuzzer: Optional[GrammarFuzzer] = None, log: Union[bool, int] = False): """ Constructor. `grammar` is the underlying grammar; `tree` is the tree to work on. `fuzzer` is the grammar fuzzer to use (default: `GrammarFuzzer`) """ assert is_valid_grammar(grammar) self.grammar = grammar self.tree = tree self.log = log if fuzzer is None: fuzzer = GrammarFuzzer(grammar) self.fuzzer = fuzzer