def new_min_tree(self, start_symbol: str) -> DerivationTree: if self.log >= 2: print(f"Creating new minimal tree for {start_symbol}") fuzzer = GrammarFuzzer(self.grammar, start_symbol=start_symbol, min_nonterminals=0, max_nonterminals=0) fuzzer.fuzz() return fuzzer.derivation_tree
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
} EXPR_GRAMMAR: Grammar = { "<start>": ["<expr>"], "<expr>": ["<term> + <expr>", "<term> - <expr>", "<term>"], "<term>": ["<factor> * <term>", "<factor> / <term>", "<factor>"], "<factor>": ["+<factor>", "-<factor>", "(<expr>)", "<integer>.<integer>", "<integer>"], "<integer>": ["<digit><integer>", "<digit>"], "<digit>": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] } from fuzzingbook.GrammarFuzzer import GrammarFuzzer if __name__ == '__main__': simple_expr_fuzzer = GrammarFuzzer(EXPR_GRAMMAR) if __name__ == '__main__': for i in range(10): fuzz_expr = simple_expr_fuzzer.fuzz() print(fuzz_expr) SIMPLE_HTML_GRAMMAR: Grammar = { "<start>": ["<html>"], "<html>": ["<plain-text>", "<tagged-text>"], } import string SIMPLE_HTML_GRAMMAR.update({ "<plain-text>": ["", "<plain-char><plain-text>"],