code: def bfs(start):
      
      to_visit = [start]
      visited = {start}
      while to_visit:
          node = to_visit.pop(0)
          yield node
          if node.exception_analysis:
              for _, _, exception in node.exception_analysis.exceptions:
                  if exception not in visited:
                      to_visit.append(exception)
                      visited.add(exception)
          for _, _, child in node.childs:
              if child not in visited:
                  to_visit.append(child)
                  visited.add(child)
docs: Breadth first search
  
      Yields all nodes found from the starting point
  
      :param start: start node