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 />

précé<strong>de</strong>nte et modifions la variable m pour qu elle reçoive la somme <strong>de</strong>s valeurs <strong>de</strong>s variables x et<br />

y :<br />

7 int m;<br />

8<br />

9 int main()<br />

10 {<br />

11 int x,y;<br />

12<br />

13 x = 12;<br />

14 y = 8;<br />

15 m = x+y;<br />

...<br />

20 }<br />

::EiC:: : 5 -> [main]<br />

13.- <br />

Def 1-0 12 13<br />

14.- <br />

Def 1-1 8 14<br />

15.- <br />

Use 1-0 13 15<br />

Use 1-1 14 15<br />

Def 0-2 15 15<br />

Pour représenter la lecture <strong>de</strong>s variables x et y dans la base <strong>de</strong> données nous <strong>de</strong>vons faire<br />

référence au numéro <strong>de</strong> ligne où elles ont été affectées c'est-à-dire respectivement les lignes 13 et<br />

14. Pour enregistrer ces <strong>de</strong>ux valeurs, nous modifions la structure <strong>de</strong> la pile d exécution AR par<br />

laquelle nous accédons aux valeurs <strong>de</strong>s variables, en lui ajoutant un champ supplémentaire line.,<br />

ci-<strong>de</strong>ssous la structure <strong>de</strong> la pile d exécution ainsi modifiée :<br />

type<strong>de</strong>f struct AR_t {<br />

val_t v;<br />

type_expr * type;<br />

unsigned short line;<br />

}AR_t;<br />

Ce champ line nous permet ainsi à chaque modification <strong>de</strong> la valeur d une variable d enregistrer<br />

le numéro <strong>de</strong> ligne où cela est effectué. Dans stoint et rvalint, nous avons ajouté une<br />

ligne <strong>de</strong> co<strong>de</strong> après chaque Def afin d affecter à la variable son nouveau numéro <strong>de</strong> ligne comme<br />

on peut le voir ci-<strong>de</strong>ssous :<br />

case stoint:<br />

stoTYPE(ival);<br />

printf("\tDef %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 />

AR[InSt[p].ext][InSt[p].val.ival].line = InSt[p].line;<br />

break;<br />

5.1.3. Numérotation et compteur d appel <strong>de</strong>s instructions<br />

Nous abordons dans cette section la numérotation <strong>de</strong>s instructions. En effet, ce point bien<br />

qu abstrait à ce niveau et pouvant paraître sans gran<strong>de</strong> importance à première vue est la clé dans<br />

notre représentation <strong>de</strong>s dépendances entre données.<br />

Nous avons vu, dans l exemple donné en section 5.1.2, que lorsqu une variable est utilisée nous<br />

avons besoin <strong>de</strong> savoir le numéro <strong>de</strong> la ligne d instruction où elle a été définie auparavant. Notre<br />

numérotation <strong>de</strong>s lignes doit non seulement permettre <strong>de</strong> faire <strong>de</strong>s liens entre les données du<br />

programme, mais aussi permettre d i<strong>de</strong>ntifier <strong>de</strong> manière unique chaque passage sur une même<br />

instruction(cf. l exemple donné ci-<strong>de</strong>ssous). Ainsi, lorsqu on passe plusieurs fois sur une même<br />

instruction (cas <strong>de</strong> fonctions récursives et boucles), nous <strong>de</strong>vons générer autant d i<strong>de</strong>ntifiants<br />

d instructions que <strong>de</strong> passages.<br />

51

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

Saved successfully!

Ooh no, something went wrong!