#include #include #include #include "table_sym.h" void symbolPush(symbolStack *symStack, struct symbolEntry *sym) { struct symbolStackCell *newCell = malloc(sizeof(struct symbolStackCell)); newCell->symbol = sym; newCell->next = *symStack; *symStack=newCell; } struct symbolEntry * symbolFind(symbolStack symStack, char *symName, int contextMinProf, int contextMaxProf) { struct symbolEntry *res = NULL; int trouve = 0; while (!trouve && symStack != NULL) { if ( strcmp(symStack->symbol->symName,symName) == 0 && symStack->symbol->contextProf >= contextMinProf && symStack->symbol->contextProf <= contextMaxProf ) { trouve=1; res=symStack->symbol; } else { symStack=symStack->next; } } return res; } void printSymTable(symbolStack symStack) { printf("DEBUG :Table des symboles\n"); printf("const?\t nom variable\taddress\tinit?\tcontextProf\n"); for(;symStack!=NULL;symStack=symStack->next) { if ( symStack->symbol->readOnly ) { printf("const\t%20s\t%x\t%i\t%i\n", symStack->symbol->symName, symStack->symbol->address, symStack->symbol->initialized, symStack->symbol->contextProf); } else { printf("\t%20s\t%x\t%i\t%i\n", symStack->symbol->symName, symStack->symbol->address, symStack->symbol->initialized, symStack->symbol->contextProf); } } printf("FIN DEBUG\n"); } void cleanSymStack(symbolStack *symStack, int contextProf) { printf("void cleanSymStack(symbolStack *symStack, %i)\n", contextProf); while ((*symStack)!=NULL && ((*symStack)->symbol->contextProf > contextProf)) { symbolStack next = (*symStack)->next; free( (*symStack)->symbol->symName ); free( (*symStack)->symbol ); free( (*symStack) ); *symStack = next; } }