19.06.2014 Views

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!