nl_tokens: / * This function takes a directed graph that may have cycles and reverses edges as appropriate to break these cycles . Each reversed edge is assigned a reversed attribute with the value true .
pl_tokens: function acyclic ( g ) { var onStack = { } , visited = { } , reverseCount = 0 ; function dfs ( u ) { if ( u in visited ) return ; visited [ u ] = onStack [ u ] = true ; g . outEdges ( u ) . forEach ( function ( e ) { var t = g . target ( e ) , value ; if ( u === t ) { console . error ( 'Warning: found self loop "' + e + '" for node "' + u + '"' ) ; } else if ( t in onStack ) { value = g . edge ( e ) ; g . delEdge ( e ) ; value . reversed = true ; ++ reverseCount ; g . addEdge ( e , t , u , <mask> ) ; } else { dfs ( t ) ; } } ) ; delete onStack [ u ] ; } g . eachNode ( function ( u ) { dfs ( u ) ; } ) ; util . log ( 2 , 'Acyclic Phase: reversed ' + reverseCount + ' edge(s)' ) ; return reverseCount ; }