Example #1
0
def fsm_diagram(grammar, start_symbol=START_SYMBOL):
    def left_align(label):
        return dot_escape(label.replace('\n', r'\l')).replace(r'\\l', '\\l')

    dot = Digraph(comment="Grammar as Finite State Machine")

    symbols = deque([start_symbol])
    symbols_seen = set()
    
    while len(symbols) > 0:
        symbol = symbols.popleft()
        symbols_seen.add(symbol)
        dot.node(symbol, dot_escape(unicode_escape(symbol)))
        
        for expansion in grammar[symbol]:
            nts = nonterminals(expansion)
            if len(nts) > 0:
                target_symbol = nts[-1]
                if target_symbol not in symbols_seen:
                    symbols.append(target_symbol)

                label = expansion.replace(target_symbol, '')
                dot.edge(symbol, target_symbol, left_align(unicode_escape(label)))
                         
                
    return display(dot)
Example #2
0
 def left_align(label):
     return dot_escape(label.replace('\n', r'\l')).replace(r'\\l', '\\l')
Example #3
0
    print('\n### User Interfaces as Finite State Machines')

if __name__ == "__main__":
    from graphviz import Digraph

if __name__ == "__main__":
    from IPython.display import display

if __package__ is None or __package__ == "":
    from GrammarFuzzer import dot_escape
else:
    from .GrammarFuzzer import dot_escape

if __name__ == "__main__":
    dot = Digraph(comment="Finite State Machine")
    dot.node(dot_escape('<start>'))
    dot.edge(dot_escape('<start>'), dot_escape('<Order Form>'))
    dot.edge(dot_escape('<Order Form>'), dot_escape('<Terms and Conditions>'),
             "click('Terms and conditions')")
    dot.edge(dot_escape('<Order Form>'), dot_escape('<Thank You>'),
             "fill(...)\lsubmit('submit')")
    dot.edge(dot_escape('<Terms and Conditions>'), dot_escape('<Order Form>'),
             "click('order form')")
    dot.edge(dot_escape('<Thank You>'), dot_escape('<Order Form>'),
             "click('order form')")
    display(dot)

# ### State Machines as Grammars

if __name__ == "__main__":
    print('\n### State Machines as Grammars')
Example #4
0
    from graphviz import Digraph


if __name__ == "__main__":
    from IPython.display import display


if __package__ is None or __package__ == "":
    from GrammarFuzzer import dot_escape
else:
    from .GrammarFuzzer import dot_escape


if __name__ == "__main__":
    dot = Digraph(comment="Finite State Machine")
    dot.node(dot_escape('<start>'))
    dot.edge(dot_escape('<start>'), dot_escape('<Order Form>'))
    dot.edge(dot_escape('<Order Form>'), dot_escape('<Terms and Conditions>'), "click('Terms and conditions')")
    dot.edge(dot_escape('<Order Form>'), dot_escape('<Thank You>'), "fill(...)\lsubmit('submit')")
    dot.edge(dot_escape('<Terms and Conditions>'), dot_escape('<Order Form>'), "click('order form')")
    dot.edge(dot_escape('<Thank You>'), dot_escape('<Order Form>'), "click('order form')")
    display(dot)


# ### State Machines as Grammars

if __name__ == "__main__":
    print('\n### State Machines as Grammars')


Example #5
0
 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))