Ajout analyse sémantique :
- Verif declaration var & tab - Verif appel var
This commit is contained in:
97
src/dico.c
Normal file
97
src/dico.c
Normal file
@@ -0,0 +1,97 @@
|
||||
#include "dico.h"
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
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)
|
||||
{
|
||||
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");
|
||||
}
|
||||
Reference in New Issue
Block a user