**** éléments de correction quick2004-LT-RICM2 **** ****Laurent Mounier et Laure Gonnord **** Remarques sur la correction de la question 3 -------------------------------------------- !! ici * désigne "étoile" et pas fois et pas le "bullet" d'une règle pointée pour la construction d'un quelconque automate d'analyse. Remarques sur comment enlever la récursivité à gauche . Tout d'abord, on essaie d'enlever la récursivité induite par le non terminal T, en regardant ce qui peut démarrer une dérivation passant par T : on peut dériver c ou (C), puis factoriser le reste qui est un certain nombre d'étoiles qui se suivent: T -> cT" | (C)T" T" -> eps | *T" Vérification : Directeur(T"->eps) = suivant (T") = suivant(T) = ??? Directeur(T"->*T")= {*} qui de toute façon ne sera pas inclus dans Suivant(T) puisque dans les autres règles on s'interdit le * Passons maintenant aux conflits sur le terminal C : La littérature dit : "pour enlever la récursivité à gauche sur A, avec A=>Aa, si on a A->Aa|B (B terminal ou non), alors on remplace par A->BR et R->aR|eps" Essayons : Je remplace les règles de C par C->TR et R->;T|eps, est-ce que ça marche ?? Directeur(R->;T)={;} Directeur(R->eps)=Suivant(R)=Suivant(C)={$,)} qui ne contient pas ';', c'est gagné. Remarque : contrairement à la grammaire de la correction, celle-ci est bien associative à gauche, voir c;c;c... Rque : La grammaire de la correction n'implique plus l'associtativité à gauche, vu que l'on mange dans G le plus gros morceaux possible avant le DERNIER point virgule. Si on essaie de faire associatif à gauche, on n'y arrive pas ! Le reste est juste ! ****