Rim Chaabane. Analyse dynamique de ... - Université Paris 8
Rim Chaabane. Analyse dynamique de ... - Université Paris 8
Rim Chaabane. Analyse dynamique de ... - Université Paris 8
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Chapitre 5 - Description technique du travail réalisé<br />
Et ainsi <strong>de</strong> suite pour les <strong>de</strong>ux <strong>de</strong>rniers appels <strong>de</strong> boucle. En regardant les colorations <strong>de</strong>s cases<br />
du tableau 1, on remarque que les instruction <strong>de</strong> type Use font appel aux valeurs du tableau T<br />
pour les valeurs <strong>de</strong>rnier_appel et <strong>de</strong>rnier_pass pour le numéro d instruction où la<br />
variable 1-0 à été modifiée qu on peut alors obtenir via la variable AR[1][0].line.<br />
Nous modifions la boucle d évaluation d instructions comme suit pour les co<strong>de</strong>s opérateurs<br />
stoint et rvalint :<br />
case stoint: stoTYPE(ival);<br />
AR[InSt[p].ext][InSt[p].val.ival].line = InSt[p].line;<br />
printf("\tDef %d-%d %d %d %d\n",<br />
InSt[p].ext,<br />
InSt[p].val.ival,<br />
AR[InSt[p].ext][InSt[p].val.ival].v.ival,<br />
InSt[p].line,<br />
T[InSt[p].line].cptr_a);<br />
T[InSt[p].line].<strong>de</strong>rnier_appel= InSt[p].line;<br />
T[InSt[p].line].<strong>de</strong>rnier_pass= T[lastln].cptr_a;<br />
break;<br />
case rvalint: rvalTYPE(ival);<br />
printf("\tUse %d-%d %d %d %d %d \n",<br />
InSt[p].ext,<br />
InSt[p].val.ival,<br />
T[AR[InSt[p].ext][InSt[p].val.ival].line].<strong>de</strong>rnier_appel,<br />
T[AR[InSt[p].ext][InSt[p].val.ival].line].<strong>de</strong>rnier_pass,<br />
InSt[p].line,<br />
T[InSt[p].line].cptr_a);<br />
break;<br />
5.1.4. Extensions pour les boucles et l appel <strong>de</strong> fonctions<br />
Dans cette section nous présentons les autres formats <strong>de</strong> la base <strong>de</strong> données pour les types non<br />
encore cités tels que les évaluations <strong>de</strong> conditions, les appels <strong>de</strong> fonctions (telles que printf())<br />
ou encore les fonctions main() et return() traitées différemment par EiC.<br />
Pour capturer les appels <strong>de</strong> boucles et les structures <strong>de</strong> contrôles if, nous avons intégré à la<br />
boucle d évaluation d instructions au niveau du co<strong>de</strong> opérateur ltint l affichage d une<br />
instruction Cond pour mettre en évi<strong>de</strong>nce dans notre base <strong>de</strong> données l évaluation d une<br />
condition 15 dans le cas d un if ou <strong>de</strong> boucles while et for. Ainsi une ligne <strong>de</strong> format Cond 16<br />
dans la base <strong>de</strong> données contient trois types d informations : la condition évaluée, la valeur <strong>de</strong> son<br />
évaluation (0 ou 1) et les i<strong>de</strong>ntifiants <strong>de</strong> la ligne d instruction.<br />
Pour afficher l appel d une fonction, nous avons modifié le co<strong>de</strong> opérateur call pour qu il<br />
génère une ligne <strong>de</strong> format Call 17 dans la base <strong>de</strong> donnée, ce format contient alors <strong>de</strong>ux types<br />
d informations au plus : les i<strong>de</strong>ntifiants <strong>de</strong> l instruction et la valeur <strong>de</strong> retour <strong>de</strong> la fonction le cas<br />
échéant.<br />
Pour afficher la fonction main(), nous lui avons réservé une ligne <strong>de</strong> format main 18 dans la<br />
base <strong>de</strong> donnée, ainsi ce format <strong>de</strong> ligne renseigne les i<strong>de</strong>ntifiants <strong>de</strong> lignes ou la fonction main()<br />
est appelée dans le fichier source C.<br />
15<br />
Seul l opérateur « < » est traité par EiC à ce sta<strong>de</strong> du projet.<br />
16 Exemple : Cond (1