// Fichier ptqsup.c : code supplémentaire pour ptq // ---------------------------------------------------------------------- #include "ptq.h" // ---------------------------------------------------------------------- // recherche générale pour un identificateur : // on regarde dans le lexique, puis dans la tds //----------------------------------------------------------------------- int recherche_id(char *s) { int r ; if ((r = recherche_lexique(s))==0) return recherche_tds(s) ; return r ; } // ---------------------------------------------------------------------- // Gestion de la table des symboles // ---------------------------------------------------------------------- struct { char nom[22] ; int type ; int val ; } tds[30] ; int next_tds = 0 ; /* TDS : ------------------------------ NOM TYPE VALEUR char[22] int int + le type correspond au token (défini dans y.tab.h) + la valeur est un entier arbitraire, pour distinguer les objets de même type. On donne une valeur implicite (le premier predicat vaut 0, le second 1, etc.). */ void insere_tds(char * s, int type) { int i, c=0 ; for (i=0 ; itype = type ; x->val = val ; x->fg = fg ; x->fd = fd ; return x ; } void affiche_formule(noeud * racine) { if (racine == NULL) return ; switch (racine->type) { case AF: printf("[") ; affiche_formule(racine->fg) ; printf("]") ; affiche_formule(racine->fd) ; break ; case LBD : printf("L") ; affiche_formule(racine->fg) ; printf(".") ; printf(" ") ; affiche_formule(racine->fd) ; break ; case QUANT : printf("%c ", (racine->val==1)?'A':'E') ; affiche_formule(racine->fg) ; printf(" ") ; affiche_formule(racine->fd) ; break ; case CON1 : printf("~ ") ; affiche_formule(racine->fg) ; break ; case CON2 : printf("("); affiche_formule(racine->fg) ; printf(" %s ", (racine->val==1)?"&":(racine->val==2)?"|":"->") ; affiche_formule(racine->fd) ; printf(")"); break ; case PRED : case VAR : case CTE : { printf("%s", string_tds(racine->type,racine->val)) ; break ; } } }