Пример #1
0
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
Пример #3
0
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__()

Пример #4
0
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
Пример #5
0
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", [])], [])])
Пример #6
0
    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))
Пример #7
0

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))',