102 lines
2.6 KiB
C
102 lines
2.6 KiB
C
#include "dico.h"
|
|
|
|
int afficheDico = 0;
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
void entreeFonction(void){
|
|
dico.base = dico.sommet;
|
|
contexte = C_VARIABLE_LOCALE;
|
|
adresseLocaleCourante = 0;
|
|
adresseArgumentCourant = 0;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
void sortieFonction(void){
|
|
dico.sommet = dico.base;
|
|
dico.base = 0;
|
|
contexte = C_VARIABLE_GLOBALE;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
int ajouteIdentificateur(char *identif, int classe, int type, int adresse, int complement)
|
|
{
|
|
dico.tab[dico.sommet].identif = strdup(identif);
|
|
dico.tab[dico.sommet].classe = classe;
|
|
dico.tab[dico.sommet].type = type;
|
|
dico.tab[dico.sommet].adresse = adresse;
|
|
dico.tab[dico.sommet].complement = complement;
|
|
dico.sommet++;
|
|
|
|
if(dico.sommet == maxDico){
|
|
fprintf(stderr, "attention, plus de place dans le dictionnaire des \
|
|
identificateurs, augmenter maxDico\n");
|
|
exit(1);
|
|
}
|
|
/* affiche_dico(); */
|
|
return dico.sommet - 1;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
int rechercheExecutable(char *identif)
|
|
{
|
|
int i;
|
|
for(i = dico.sommet - 1; i >= 0; i--){
|
|
if(!strcmp(identif, dico.tab[i].identif))
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
int rechercheDeclarative(char *identif)
|
|
{
|
|
int i;
|
|
for(i = dico.base; i < dico.sommet; i++){
|
|
if(!strcmp(identif, dico.tab[i].identif))
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
void affiche_dico(void)
|
|
{
|
|
if(afficheDico) {
|
|
int i;
|
|
printf("------------------------------------------\n");
|
|
printf("base = %d\n", dico.base);
|
|
printf("sommet = %d\n", dico.sommet);
|
|
for(i=0; i < dico.sommet; i++){
|
|
printf("%d ", i);
|
|
printf("%s ", dico.tab[i].identif);
|
|
if(dico.tab[i].classe == C_VARIABLE_GLOBALE)
|
|
printf("GLOBALE ");
|
|
else
|
|
if(dico.tab[i].classe == C_VARIABLE_LOCALE)
|
|
printf("LOCALE ");
|
|
else
|
|
if(dico.tab[i].classe == C_ARGUMENT)
|
|
printf("ARGUMENT ");
|
|
|
|
if(dico.tab[i].type == T_ENTIER)
|
|
printf("ENTIER ");
|
|
else if(dico.tab[i].type == T_TABLEAU_ENTIER)
|
|
printf("TABLEAU ");
|
|
/* else if(dico.tab[i].type == _ARGUMENT) */
|
|
/* printf("ARGUMENT "); */
|
|
else if(dico.tab[i].type == T_FONCTION)
|
|
printf("FONCTION ");
|
|
|
|
printf("%d ", dico.tab[i].adresse);
|
|
printf("%d\n", dico.tab[i].complement);
|
|
}
|
|
printf("------------------------------------------\n");
|
|
}
|
|
}
|