%{ // Fichier ptq.y : parser pour PTQ // --------------------------------- #include "ptq.h" int main(void) { return yyparse() ; } %} %token PRED CON1 CON2 VAR CTE QUANT LBD AF %token ID_VAR ID_PRED ID_CTE ID LEX DCL_DEF %token REQ_LF REQ_PARSE LEX CAT %token N Np Vi Vt Det %% /* C O N T R O L E */ /* --------------- */ S: Instruction S | Instruction ; Instruction: Declaration | Requete ; Declaration: ID_VAR ID ';' { insere_tds((char *)$2, VAR) ; } | ID_PRED ID ';' { insere_tds((char *)$2, PRED) ; } | ID_CTE ID ';' { insere_tds((char *)$2, CTE) ; } | DCL_DEF ';' { defaut_tds() ; } | LEX ID CAT F ';' { insere_lexique((char *)$2, $3, (noeud *)$4) ; } ; Requete: '.' '.' { printf(" TDS: \n") ; affiche_tds() ; printf(" LEXIQUE: \n") ; affiche_lexique() ; } | REQ_LF F '?' { printf("Formule logique reconnue : ") ; affiche_formule((noeud *)$2) ; printf("\n") ; } | REQ_PARSE P '?' { printf("Phrase parsée\n") ; } ; /* L A M B D A - C A L C U L */ /* ------------------------- */ F: T | CON1 F { $$ = (int) cree_n(CON1, $1, (noeud *) $2, 0) ; } | '(' F CON2 F ')' { $$ = (int) cree_n(CON2, $3, (noeud *) $2, (noeud *) $4) ; } | QUANT VAR F { $$ = (int) cree_n(QUANT, $1, cree_n(VAR, val_tds((char *)$2), 0, 0), (noeud *) $3) ; } | LBD VAR '.' F { $$ = (int) cree_n(LBD, 0, cree_n(VAR, val_tds((char *)$2), 0, 0), (noeud *) $4) ; } | '[' F ']' F { $$ = (int) cree_n(AF, 0, (noeud *) $2, (noeud *) $4) ; } ; T: VAR { $$ = (int) cree_n(VAR,val_tds((char *)$1),0,0) ; } | CTE { $$ = (int) cree_n(CTE,val_tds((char *)$1),0,0) ; } | PRED { $$ = (int) cree_n(PRED,val_tds((char *)$1),0,0) ; } ; /* L A N G A G E N A T U R E L */ /* ----------------------------- */ P: SN SV ; SN: Det N | Np ; SV: Vi | Vt SN ; %%