<strong>Analyse</strong> <strong>dynamique</strong> <strong>de</strong> programmes C Annexe - V - Scripts awk # formaterdata.awk # -------------------------------------------------------- # Supprime la base <strong>de</strong> donnee pour ne gar<strong>de</strong>r que les données # du programme a analyser /co<strong>de</strong>s_test\//,/EiC/ { print $0 } # graph1.awk # -------------------------------------------------------- # Genere les premieres lignes du fichier .dot BEGIN { printf "digraph G { ranksep=.75; size=\"7.5,7.5\";\n{\nno<strong>de</strong> [shape=plaintext, fontsize=16];\n" } # { print } $1 == "#" { printf "\"%s\" -> ", $2 } END { printf "\"end\";\n}\n" } # graph2.awk # -------------------------------------------------------- # Genere l essentiel du fichier .dot BEGIN { lastline = " " } $1 == "main" { printf "{rank = same;\n\"%s:%s\"; \"#%s:%s\";\n}\n\n", $2, $3, $2, $3 printf "\"#%s:%s\" [label=\"main-%s\", shape=box, color=red]\n", $2, $3, $3 #printf "\"#%s:%s\" -> ", $2, $3 lastline = "\"#"$2":"$3"\""} $1 == "Def" { if (lastline != " ") { printf "%s -> \"#%s:%s\"\n\n", lastline, $4, $5 lastline = " " } $3 } printf "{rank = same;\n\"%s:%s\"; \"#%s:%s\";\n}\n", $4, $5, $4, $5 printf "\"#%s:%s\" [label=\"%s=%s\", color=green]\n\n", $4, $5, $2, $1 == "Use" { printf "\"#%s:%s\" -> \"#%s:%s\"\n", $3, $4, $5, $6 } $1 == "Call" { i = 4 if (lastline != " ") { printf "%s -> \"#%s:%s\"\n\n", lastline, $2, $3 lastline = "\"#"$2":"$3"\"" } #printf "\"#%s:%s\"\n", $2, $3 printf "{rank = same;\n\"%s:%s\"; \"#%s:%s\";\n}\n", $2, $3, $2, $3 printf "\"#%s:%s\" [label=\"Call-%s\\n", $2, $3, $3 while (i \"#%s:%s\"\n\n", lastline, $4, $5 lastline = "\"#"$4":"$5"\"" } #printf "\"#%s:%s\"\n", $4, $5 98
<strong>Analyse</strong> <strong>dynamique</strong> <strong>de</strong> programmes C printf "{rank = same;\n\"%s:%s\"; \"#%s:%s\";\n}\n", $4, $5, $4, $5 printf "\"#%s:%s\" [label=\"Cond-%s\\n%s\", shape=diamond, headport=w, tailport=e]\n", $4, $5, $5, $2 if ($3 == "0") lastline="\"#"$4":"$5"\":e" else lastline="\"#"$4":"$5"\":w" } $1 == "Return" { if (lastline != " ") { printf "%s -> \"#%s:%s\"\n\n", lastline, $3, $4 lastline = "\"#"$3":"$4"\"" } #printf "\"#%s:%s\"\n", $3, $4 printf "{rank = same;\n\"%s:%s\"; \"#%s:%s\";\n}\n", $3, $4, $3, $4 printf "\"#%s:%s\" [label=\"Return-%s\\n%s\", shape=box]\n", $3, $4, $4, $2 } END { printf "\n}\n" } 99