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