Barême : ======== Q1 : 3 pts Q2 : 2 pts Q3 : 2 pts Q4 : 2 pts Q5 : Hors-Barême Q6 : 2 pts Q7 : 5 pts Q8 : 4 pts Q1. Voir fichier PDF joint. == Q2. == () # [] Le symbole # n'est pas un lexeme du langage. Q3. == () [] Il manque la "barre" entre les deux elements. Q4. == L n'est pas un langage régulier car il contient des imbrications d'elements. Intuitivement il faudra donc "compter" les crochets et parenthèse ouvertes et fermées. Q5. Voir fichier PDF joint. == Q6. Voir fichier PDF joint. == Q7. == La fonction LC renvopie le lexeme courant. Rec_figure() = Demarrer ; /* on demarre l'analyse syntaxique /* Rec_ligne_elems Rec_ligne_elems() = Rec_elem() ; Rec_suite_ligne_elems() Rec_suite_ligne_elems() = selon LC().nature cas BARRE : Avancer ; Rec_elem() ; Rec_suite_ligne_elems() sinon : /* ne rien faire */ Rec_elem() = selon LC().nature cas PARO : Avancer ; Rec_ligne_elem_imbric() ; si LC().nature = PARF alors Avancer sinon Erreur() cas CROCHO : Avancer ; Rec_ligne_elem_imbric() ; si LC().nature = CROCHF alors Avancer sinon Erreur() sinon : Erreur() Rec_ligne_elem_imbric() = selon LC().nature cas PARO, PARF : Rec_ligne_elems() ; sinon : /* ne rien faire */ Q8. == int profondeur(Ast A) { assert (A != NULL) ; /* A ne peut pas etre l'arbre vide */ switch (A -> nature) { case N_ELLIPSE: case N_RECTANGLE: if (A->droit == NULL) /* pas d'element imbrique, on revoie la valeur 1 */ return 1 ; else /* uniquement un fils droit, on renvoie la profonfeur de ce fils */ return profondeur(a->droit) ; break ; case N_BARRE: /* on renvoie le maximum de la profondeur des fils gauche et droit */ return (max (profondeur(a->gauche), profondeur(a->droit)) ; break ; default: /* cas impossible */ break } }