source: Deliverables/D2.2/8051/src/utilities/printCFG.ml @ 486

Last change on this file since 486 was 486, checked in by ayache, 8 years ago

Deliverable D2.2

File size: 814 bytes
Line 
1(* Pasted from Pottier's PP compiler *)
2
3open PrintPottier
4
5let print_graph instruction successors () (graph, entry) =
6
7  (* Print instructions in depth-first order; this is a
8     rather natural and readable order. *)
9
10  let rec visit (visited, lines) l =
11    if Label.Set.mem l visited then
12      visited, lines
13    else
14      let visited = Label.Set.add l visited in
15        let i = Label.Map.find l graph in
16        let lines = instruction l i :: lines in
17        List.fold_left visit (visited, lines) (successors i)
18(*
19      try
20        let i = Label.Map.find l graph in
21        let lines = instruction l i :: lines in
22        List.fold_left visit (visited, lines) (successors i)
23      with Not_found ->
24        visited, lines
25*)
26  in
27
28  let _, lines = visit (Label.Set.empty, []) entry in
29  String.concat "\n" (catenate (transposerev lines))
30
Note: See TracBrowser for help on using the repository browser.