def display_stack(istack): def stack_to_tree(stack): current, *rest = stack if not rest: return (repr(current), []) return (repr(current), [stack_to_tree(rest)]) display_tree(stack_to_tree(istack.mstack), graph_attr=lr_graph)
if __name__ == "__main__": print('\n### Counting Expansions') if __package__ is None or __package__ == "": from Parser import Parser, EarleyParser, PEGParser else: from .Parser import Parser, EarleyParser, PEGParser IP_ADDRESS_TOKENS = {"<octet>"} # EarleyParser needs explicit tokens if __name__ == "__main__": parser = EarleyParser(IP_ADDRESS_GRAMMAR) if __name__ == "__main__": tree = parser.parse("127.0.0.1")[0] display_tree(tree) class ExpansionCountMiner(object): def __init__(self, parser, log=False): assert isinstance(parser, Parser) self.grammar = extend_grammar(parser.grammar()) self.parser = parser self.log = log self.reset() if __package__ is None or __package__ == "": from GrammarCoverageFuzzer import expansion_key # minor dependency else: from .GrammarCoverageFuzzer import expansion_key # minor dependency
if __package__ is None or __package__ == "": from Parser import EarleyParser else: from .Parser import EarleyParser if __package__ is None or __package__ == "": from GrammarFuzzer import display_tree else: from .GrammarFuzzer import display_tree if __name__ == "__main__": parser = EarleyParser(XML_GRAMMAR, tokens=XML_TOKENS) for tree in parser.parse("<html>Text</html>"): display_tree(tree) # ### Building the Fragment Pool if __name__ == "__main__": print('\n### Building the Fragment Pool') class FragmentMutator(Mutator): def __init__(self, parser): """Initialize empty fragment pool and add parser""" self.parser = parser self.fragments = {k: [] for k in self.parser.cgrammar} super().__init__()
if __name__ == "__main__": print('\n### A Grammmar-Based Reduction Approach') if __package__ is None or __package__ == "": from GrammarFuzzer import all_terminals, expansion_to_children, display_tree else: from .GrammarFuzzer import all_terminals, expansion_to_children, display_tree if __name__ == "__main__": derivation_tree, *_ = EarleyParser(EXPR_GRAMMAR).parse(expr_input) display_tree(derivation_tree) # ### Simplifying by Replacing Subtrees if __name__ == "__main__": print('\n### Simplifying by Replacing Subtrees') import copy if __name__ == "__main__": new_derivation_tree = copy.deepcopy(derivation_tree) # We really should have some query language
else: from .Grammars import START_SYMBOL, syntax_diagram, is_nonterminal if __package__ is None or __package__ == "": from GrammarFuzzer import GrammarFuzzer, FasterGrammarFuzzer, display_tree, tree_to_string else: from .GrammarFuzzer import GrammarFuzzer, FasterGrammarFuzzer, display_tree, tree_to_string if __name__ == "__main__": derivation_tree = (START_SYMBOL, [("1997,van,Ford,E350", [])]) if __name__ == "__main__": display_tree(derivation_tree) if __name__ == "__main__": derivation_tree = (START_SYMBOL, [('<vehicle>', [("1997,van,Ford,E350", [])], [])]) if __name__ == "__main__": display_tree(derivation_tree) if __name__ == "__main__": derivation_tree = (START_SYMBOL, [('<vehicle>', [('<model>', [('1997', [])]), (",van,Ford,E350", [])], [])])
children = [] tree = (START_SYMBOL, children) for i, line in enumerate(mystring.split('\n')): children.append( ("record %d" % i, [(cell, []) for cell in line.split(',')])) return tree def lr_graph(dot): dot.attr('node', shape='plain') dot.graph_attr['rankdir'] = 'LR' if __name__ == "__main__": tree = parse_csv(mystring) display_tree(tree, graph_attr=lr_graph) if __name__ == "__main__": mystring = '''\ 1997,Ford,E350,"ac, abs, moon",3000.00\ ''' print(mystring) def highlight_node(predicate): def hl_node(dot, nid, symbol, ann): if predicate(dot, nid, symbol, ann): dot.node(repr(nid), dot_escape(symbol), fontcolor='red') else: dot.node(repr(nid), dot_escape(symbol))
if __package__ is None or __package__ == "": from Parser import PEGParser, highlight_node else: from .Parser import PEGParser, highlight_node if __package__ is None or __package__ == "": from GrammarFuzzer import display_tree else: from .GrammarFuzzer import display_tree if __name__ == "__main__": parser = PEGParser(VAR_GRAMMAR) for tree in parser.parse(mystring): display_tree(tree, node_attr=highlight_node(hl_predicate)) VAR_TOKENS = {'<number>', '<identifier>'} if __name__ == "__main__": mystring = 'avar=1.3;bvar=avar-3*(4+300)' parser = PEGParser(VAR_GRAMMAR, tokens=VAR_TOKENS) for tree in parser.parse(mystring): display_tree(tree, node_attr=highlight_node(hl_predicate)) if __name__ == "__main__": mystrings = [ 'abc=12+(3+3.3)', 'a=1;b=2;c=a+b', 'avar=1.3;bvar=avar-3*(4+300)', 'a=1.3;b=a-1*(4+3+(2/a))',