Théorie des Langages I ) Généralités : Programme écrit en langage Source ( LS ) Compilation Interprétation ( LI ) Diagnostics Langue naturelle ( LN ) Programme écrit en langage cible ( LC ) Quatre langages sont en jeux : En entrée, il peut y avoir des milliers de langages Source différents. En sortie, il peut y avoir des milliers de plate-formes différentes. Ce qui engendrerait des millions de compilateurs différents. Apparition d’une compilation en deux passes ( Car limitation de la mémoire vive sur les anciennes machines, on ne pouvait pas stocker tous les composants ) Ancienne Compilation en trois passes : - Analyse lexicale - Analyse syntaxique - Edition de liens Si je suis capable de passer du LS Inter Lingua et de Inter Lingua LC opération d’analyse opération de synthèse Passage par une étape intermédiaire, s’est une représentation interne de contenu du programme en langage unique ( pivot ) Ce même schéma s’applique et fonctionne au Traitement Automatique de la Langue Naturelle ( TALN ) Pour des problèmes de traduction, on parle de Traduction Assistée par Ordinateur ( TAO ) La démarche est identique d’un langage à l’autre mais il y a une grande diversité des outils servant à réaliser les différentes étapes mais les méthodes sont les mêmes, les techniques font appel à la même théorie. Page 1 Théorie des Langages Origines de la ThL : Linguistique ( avec CHOMSKY dans les années 1950 ) Informatique Origine double Développement conjoint de la Théorie des Langages. Premier compilateur au début des années 1950. On pensait que c’était un problème difficile. Pour le compilateur de FORTRAN ( FORmula TRANslator ) il a fallu 18 années / hommes. Le premier compilateur a été créé par BACKUS avec son équipe en 1957. Rappels sur les ensembles : 0 – Généralités : Définition : - en extension E = {a, b, c } - en compréhension F = { x | P(x) } Appartenance aE Ensemble vide 1 – Réunion, Intersection, Différence : Réunion : Si = { x | x S1 … ou Si … ou Sn } 1in Intersection : Si = { x | x S1 … et Si … et Sn } 1in Différence : A – B ou ( A \ B ) = { x | x A et x B } Diagramme de VENN : Inclusion Complément B CBA B A Partition A AB CB A Union Intersection Différence Page 2 Théorie des Langages 2 – Produit cartésien de n ensembles : Couple, paire Triplet Qadruplet N-Tuplet : ( a1, a2 ) : ( a1, a2, a3 ) : ( a1, a2, a3, a4 ) : ( a1,…,ai,…,an ) n 5 Définition : S1…Si…Sn = { ( a1,…,ai,…,an ) a1 S1…ai Si… an Sn } 3 – Produit par concaténation : Chaîne a1…ai…an = a1||…||ai||…||an 4 – Relations Réflexivité Antisymétrie Symétrie Transitivité a E, a R a ( a, b ) E E, aRb et bRa a = b ( a, b ) E E, aRb bRa ( a, b, c ) EEE, aRb et bRc aRc : : : : Note : Antisymétrie Réflexivité Représentation ensembliste : R = {(a,b) , (b,c) , (a,c) } Représentation matricielle : a a b c b 1 0 0 0 0 0 c 1 1 0 Cette matrice n’est pas réflexive car il n’y a pas de 1 sur la diagonale. Pas antisymétrique Pour le transitivité : Produit matriciel ( avec ET, + OU ) 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 Page 3 Théorie des Langages 4.1 Relation d’ordre Réflexive, antysymétrique, transitive a - Ordre partiel : il existe (a, b ) tel que ni aRb ni bRa b c ? On peut comparer a et c, a et b mais pas b et c - Ordre Total ( Je suis toujours capable de dire aRb OU bRa ) 4.2 Relation d’équivalence Réflexive, symétrique, transitive 5 – Partition en classes d’équivalence Si E /R n’a que deux classes, alors R est une propriété 6 – Propriétés et opérations : Opération interne : a E, b E = a o b E Commutativité : a, b, a o b = b o a Associativité : a,b,c (aob)oc = ao(boc) Elément neutre : e a aoe=eoa=a Elément symétrique : a b, a o b = b o a = e Distributivité sur * sur o à gauche a,b,c a*(boc) = (a*b) o (a*c) à droite a,b,c (boc)*a = (b*a) o (c*a) 7 – Structure de groupe E non vide muni d’une opération notée o ayant les propriétés : - Associativité - Elément neutre - Elément symétrique 8 – Demi-groupe E non vide muni d’une opération interne notée o ayant la propriété d’associativité 9.1 – Monoïde libre ( les langages formels découlent des monoïdes libres ) E non vide muni d’une opération notée o ayant les propriétés suivantes : - Associativité - Elément neutre Page 4 Théorie des Langages 9.2 – Relation, fonction et application - Une relation définie sur E F met a de E en relation avec 0, 1 ou plusieurs éléments de F - Une fonction : a est en relation avec 0 ou 1 élément de F - Une application : a est en relation avec 1 élément de F 10 – Application 10.1 – Surjection ( Spécialisation des applications ) Je couvre tout l’ensemble d’arrivée E F 10.2 – Injection Des éléments de F ne sont pas image de E E F 10.3 – Bijective ( Surjection et injection ) E F 11 – Ensemble fini ou infini Définition : Un ensemble E est fini s’il existe une bijection entre E et un segment ( intervalle) de type [1,n] Cardinal : Card( E ) = n Page 5 Théorie des Langages 12 – Ensembe infini dénombrable Définition : Un ensemble de E est infini dénombrable s’il existe une bijection entre E et N. 13 – Parties d’un ensemble P(E ) est unique Card( P(E) ) = 2n 14 – Homomorphismes ( entre deux monoïdes ) | M1 = D1,o1,e1 M2 = D2, o2 ,e2 i) ii) ( x o1 y ) = (x) o2 ( y ) ( e1 ) = e2 Exemple : | {,a,b,aa,bb,ab,ba,…}, ||, i) ii) N, + ,o Long(x || y ) = long( x ) + long( y ) Long( ) = 0 Page 6 Théorie des Langages I ) Alphabet et Langages : 1.1 ) Définition d’un alphabet ( vocabulaire ) C’est un ensemble fini de symboles ( ou de caractères ) 1.2 ) Les Chaînes : une chaîne est un N- uplet d’éléments appartenant à un alphabet donné w = (x1,…,xi,…,xn ) = x1…xi…xn Longueur d’une chaîne : Nombre de symbole qui compose w Cas particuliers : La Chaîne vide : Notée ou « » Long( ) = 0 Egalité entre deux chaînes : W = x1…xn W’ = x1…xm W = W’ n = m et 1 i n on a xi = x’i 1.3 Opérations sur les chaînes : 1.3.0 Concaténation : W = x1…xi…xn avec xi X W ‘ = x’1…x’i…x’n avec x’i X W || W ‘ = WW ‘ = x1…xi…xn x’1…x’i….x’n 1.3.1 Propriétés dans L = { W = x1…xn avec xi X et n 0 ) Si n = 0 alors W = 1. 2. 3. 4. C’est une opération interne | WW ’ | = | W | + | W ‘ | Associativité de la concaténation Elément neutre chaîne vide W L on a W = W = W Page 7 Théorie des Langages 1.3.2 Occurrences d’un symbole : Exemple : W= charivari 12345678 | W | a = { 3, 7 } | |W|a | = 2 | | W|i | = 2 1.3.3 Indexation : W[ 6 ] = v ( d’après l’exemple précédent ) W[ 1 : 6 ] = chariv W[ 1; 3 ; 6 ] = ( c, a, v ) // c’est un triplet W[ 0 ] = = W[ |W| + 1 ] 1.3.4 Facteur gauche, droit ou facteur : préfixe suffixe sous-chaîne Facteur gauche d’une chaîne W : tous les préfixes de la chaîne W en considérant les n premiers symboles de la chaîne W. avec 0 n | W | Facteur droit d’une chaîne W : tous les suffixes de la chaîne W en considérant les n derniers symboles de la chaîne W. avec 0 n | W | Facteur de W est l’ensemble des préfixes des suffixes de W. Cas particulier : Facteurs gauches propres = { des facteurs gauches de W } \ { , W } privé de Facteurs droits propres = { des facteurs droits de W } \ { , W } Facteurs propres = { facteur de W } \ { , W } Page 8 Théorie des Langages 1.4 Notions de Langages : 1.4.0 Définition générale : ( Voir dictionnaire ) 1.4.1 Approche de la notion formelle : Opération || Voir produit cartésien de deux ensembles Soit un alphabet X X2 = { W = x1x2, xi X } Xk = { W = x1….xk, xi X } Xk = Xk-1 || X = XXk-1 résulte de l’associativité de la concaténation X+ = k>0 Xk X* = X+ { } = k0 Xk X0 = { } {}0 Structure de X* L’opération de concaténation dans X* est une opération interne Cette opération est associative X* est un demi-groupe Cette opération possède un élément neutre X* est un monoïde libre 1.4.2 Définition d’un Langage Formel : Un langage L bâtit sur un alphabet X est un sous-ensemble de X* Remarques : Tout élément de L est une chaîne qui appartient à X*. A la notion de sous-ensemble va correspondre des caractéristiques des éléments W L X est fini alors que L peut être finie ou infinie. Page 9 Théorie des Langages 1.5 Opération de base sur les langages : Soit un alphabet X et X* le monoïde libre qui correspond à X et dans X* j’ai deux langages. A et B qui sont des sous-ensembles de X*. A X* et B X* - Union - Intersection - Complément - Concaténation de deux langages : AB = { W A OU B } AB = { W A ET B } /A = { W X* ET A } AB = { W = xy | x A et y B } x concaténé avec y - Itération ( Fermeture de Kleene ) A* = k0 Ak Exemples : C = { 0,…,9} V = { A, E, I, O, U, Y } = { Voyelles majuscules non accentuées } K = { B,C, D,…, Z } = { Consonnes en majuscules } L=VK Description d’un identificateur : L( L C ) * Commence par une lettre puis après on met ce que l’on veut. Description des nombres : ( ( C \ {0}) C* ) { 0 } Si on s’autorise à commencer par 0 : C+ 2. Grammaires : Cf la définition en compréhension 2.1 Objectifs : Triple : - Reconnaître les éléments d’un langage ( W appartient-il à L ? W ? L ) - Génération des éléments de L et uniquement ceux-là - Donner une idée de la structuration des éléments de W Exemple : Parenthèses, savoir à quelle parenthèse en correspond une autre. Page 10 Théorie des Langages 2.2 Définition d’une grammaire formelle syntagmatique Une grammaire G est un quadruplet G = < VN, VT, P, S > VN = Vocabulaire non terminal ensemble fini de variables. ( Eléments auxiliaires permettant d’écrire les règles de G ) VT = Vocabulaire terminal, ensemble fini de symboles ( Ils appartiennent à l’alphabet sur lequel est bâtit le langage L( G ) ) Langage qui correspond à la grammaire G VN VT = V = VN VT = Vocabulaire de la grammaire P = Ensemble fini de règles de production ( ou de réécriture ) ( , ) ::= se réécrit en ( écrit en Backus Naur Form ) V+ et V* V* VN V* S : axiome VN à partir duquel les réécritures seront effectuées appliqués Exemples : G1 = < {E}, { a, b, +, }, { (EE+E) , ( EEE), ( Ea), ( Eb )} , E > { (EE+E |EE | a | b ) } G2 = < {B} , { x, y, , , }, {( B x | y | BB | BB | B ) }, B > Page 11 Théorie des Langages 3. Classification des règles de production : Règle de production se décompose en deux parties Cg A Cd Contexte gauche Partie productive Contexte droit 3.0 Règle sans restrictions : Une règle sans restriction est telle que sa partie productive est de longueur > 1 ( |A| > 1 ) 3.1 Règles contextuelles : Est une règle telle que |A| = 1 Cg A Cd Cg B Cd se réécrit avec A VN, B V* et Cg, Cd V* 3.2 Règle non contextuelle : |A| = 1 Cg = Cd = Règle de la forme AB avec A VN et B V* 4. Classification des grammaires ( CHOMSKY en 1957 ) : 4.0 Grammaire sans restrictions ( Grammaire de type 0 ) : Contient au moins une règle sans restriction 4.1 Grammaires contextuelles ( Grammaire de type 1 ) : Ne contient aucune règle sans restrictions et contient au moins une règle contextuelle 4.2 Grammaires non contextuelles ( Grammaire de type 2 ) : Toutes les règles de G sont non contextuelles. Page 12 Théorie des Langages 4.3 Grammaires régulières ( Grammaire de Type 3 ) : 1959 Une grammaire G est régulière à gauche si toutes ses règles sont régulières à gauche Une règle régulière à gauche est de la forme 1. A xB 2. A x avec x VT et A, B VN Une règle régulière à droite est de la forme 3. A Bx 4. A x avec x VT et A, B VN Remarque : Pour qu’une grammaire soit régulière, il faut que toutes ses règles soient régulières à gauche ou bien que toutes ses règles soient régulières à droite Exemple : S aS | Sb | c Cette grammaire n’est pas régulière Exemple : G = < {S, A}, {0, 1}, { ( S0A1), ( 0A00A1), ( A ) }, S } Règle non contextuelle règle contextuelle règle régulière G est une grammaire contextuelle 5. Dérivations : 5.0 Notion de dérivation : G = < VN, VT, P, S > V = VN VT Soit une chaîne V* VNV*, on recherche une sous-chaîne de telle que V* VNV* et telle que la partie gauche d’une règle R = ( :: ) P et on produit une chaîne obtenue en remplaçant par . Ce processus s’appelle le processus de dérivation qui consiste à appliquer des règles de production de P. On a ps ps avec ( , ) P et p, s V* Et peut appartenir à V*. On dit que dérive de ou réécriture de est une relation Page 13 Théorie des Langages 5.1 Définition d’une chaîne dérivable ( récursivité ) V* est dérivable de G ssi - soit = S - soit il existe = p s chaîne dérivable de G et ( , ) P et = p s 5.2 Syntagmes d’une grammaire Un syntagme de G est une chaîne dérivable de G qui appartient a VT* ( Elle ne contient aucun élément de VN ) Les éléments d’un langage sont les syntagmes de G L( G ) = { Syntagmes de G } Exemple : Type 2 : Grammaire non contextuelle G2 = < { S }, {a, b}, { SaSb |ab }, S > L( G2 ) = { an.bn, n> 0 } Type 3 : Grammaire régulière à gauche G3 = < {A, B} , { a, b, c, d } , { (A aB | bB ), ( B c |d) }, A > L( G3 ) = { ac, ad, bc, bd } 5.3 Relation de dérivation Soit la relation de base Elle n’est pas réflexive Elle n’est pas symétrique Elle n’est pas transitive On construit trois relations : k 1. : On a obtenu à partir de en appliquant k dérivations + 2. : Fermeture transitive de la relation de dérivation de base. On a obtenu à partir de en appliquant une ou plusieurs dérivations * + 3. : Fermeture réflexive de . est obtenu à partir de en appliquant 0, 1 ou plusieurs dérivations. * L( G ) = { chaîne w telle que S w et w VT } Syntagme Page 14 Théorie des Langages Remarques : 1. Ne pas confondre la relation de dérivation et celle de réécriture ( ) peut se réécrire en ( Compétence ) s’est réécrit en ( Performance ) 2. Entre l’axiome S et un syntagme w il peut y avoir plusieurs voies de dérivation Nécessité de choisir une méthode dans l’ordre de construction de la dérivation.( Numéro de règle, Et choix de l’élément de VN dans la chaîne dérivable qui va être développée en premier ) Exemple : pst | Et |v 1 2 3 5.4 Les langages syntagmatiques Ce sont des langages pour lesquels il existe une grammaire qui permet de les engendre Définition : Deux grammaires G et G’ sont équivalentes ssi L( G ) = L( G’ ) On préfère, en général, la grammaire de type le plus élevé pour décrire un langage Exemple : Cf G2 du 5.2 confrontée à G’ = < { S, A }, { a,b } , { (S, aAb), ( aA,aaAb) ,( A, ) } , S > G’ est une grammaire de type 1 ( Contextuelle ) G’ G2 car L( G’ ) = L( G ) Page 15 Théorie des Langages Type d’un langage syntagmatique : L est de type 0 s’il est engendré par une grammaire sans restriction telle que L = L( G ) et qu’il n’existe pas G’ de type > 0 telle que L = L( G’ ) L est de type 1 s’il est engendré par une grammaire sans restriction telle que L = L( G ) et qu’il n’existe pas G’ de type > 1 telle que L = L( G’ ) L est de type 2 s’il est engendré par une grammaire sans restriction telle que L = L( G ) et qu’il n’existe pas G’ de type > 2 telle que L = L( G’ ) L est de type 3 s’il existe G de type 3 qui engendre L L3 L2 L1 L 0 En général, si G est de type quelconque < 2 on ne sait pas dire à partir de G si L( G ) est vide, finie ou infinie, mais s’il est de type 2 on sait le faire 6. Cas des grammaires de type 2 6.1 Arbres de dérivation : on entoure chaque partie droite d’une règle de crochets ouvrant et fermant auxquels on ajoute un numéro de règle. Grammaires de DICK Exemple : G = < {E } , { 0,…,9, + , * } , E [ E+E]1, E[ E*E]2, E[0]3,...,E[9]3 } , E > E2+35 * a. E [ E+E]1 [ E + [ EE ]2 ]1 [ [2]3 + [ [3]3 [5]2 ]1 * b. E [ EE]2 [ [E+E]1 E ]2 [ [[2]3 + [ [3]3]1 [5]3 ]2 Arbres Abstraits : Pour a. Pour b. + 2 3 = 17 + 5 2 5 3 = 25 ( Incorrect ) Page 16 Théorie des Langages Arbres de dérivation Pour a. Pour b. E E E + E 2 E 3 E E 5 2 E E + E 5 3 Définition ( Récursive ) d’un arbre de dérivation Soit une grammaire G = > VN, VT, P, S > de type 2. Un arbre de dérivation D de G est une arborescence telle que : La racine est étiquetée par S Si D1, …,Di,…,Dk avec k > 0 sont les sous-arborescences directes de la racine et si elles sont étiquetées X1, …Xk alors o Si Xi VN alors Di est un arbre de dérivation pour G( Xi )=< VN, VT, P, Xi > o Si Xi VT alors Di est réduit à un sommet étiqueté par Xi On peut introduire un ordre dans le parcours de l’arbre qui permet de retrouver les syntagmes à partir de l’axiome, mais de plus associer des actions au parcours. 6.2 Ambiguïté - Un syntagme est dit ambiguë s’il existe plus d’un arbre de dérivation associé qui permette de le poser Un langage est ambigu au regard d’une grammaire G si elle produit au moins un syntagme ambigu L est ambiguë s’il n’existe pas une grammaire G non ambiguë qui permet de la produire Exemple : LE BOUCHER SALE LA TRANCHE Page 17 Théorie des Langages 7. Complément sur les langages syntagmatiques 7.1 Déterminer le type d’un langage - Trouver G de type le plus élevé telle que L = L( G ) Propriété sur les éléments de L o Tout langage fini est de type 3 o Si | VT| = 1 alors L( G ) n’est pas forcément de type 3 o Si | VT | > 1 , on ne peut rien dire sur le type de L 7.2 Schémas types de langages 7.2.3 Langage régulier ( Type 3 ) : Dents de peigne : S a S b c Type de base { a}+ S a S |a 7.2.2 Langage non contextuel ( Type 2 ) Emboîtement : S a S b a S . . b a b Type de base L = {an.bn, n 0 } S aSb | Mécanique de type poupées Russes 7.2.1 Type contextuel ( type 1 ) anbncn |w| = 3n G = < { S, S1, S2 }, {a, b, c }, { S aS1c, S1 b | SS2 , cS2S2c, bS2bb}, { S} > Page 18 Théorie des Langages Extension du répertoire des langages : Théorème : (Li)* est du même type que Li Le type de LiLj inf(i, j) Le type de LiL j inf(i, j) L3L’3 = L’’3 L’intersection de deux langages réguliers de type 3 est un langage régulier de type 3 III ) ANALYSE LEXICALE : 1. Raison d’être de l’A. L : Il aurait été possible de compiler un programme en une seule étape Description des identificateurs L( L C {_} ) * On peut donc traiter les éléments de ce langage avec des algorithmes plus simples que ceux utilisés pour traiter des langages de type 2 Objectif : Identifier les unités lexicales Programmes à compiler en Langage Source ( LS ) AL Grammaire régulière UL AS Grammaire non contextuelle 2. Expressions et ensembles réguliers : 2.1 Ensemble régulier sur l’alphabet X 2.2 Expressions régulières Critères d’arrêt : . : l’ensemble vide est un ens. reg. .{ } est un ens. reg. .{a } tel que a X est un ens. reg. . est un exp. reg. dénotant l’ens. reg. vide. . est une exp. reg. dénotant l’ensemble contenant .a est une exp.reg. dénotant l’ensemble contenant {a} Si E et F sont des ens. reg. alors : ( E F ), ( E||F), (E*),(F*) sont des ens. reg. Si e et f sont des exp. reg. alors : (e|f), (e.f), (e*), (f*) le sont aussi Rien d’autre n’est un ensemble régulier Rien d’autre n’est une expression régulière Page 19 Théorie des Langages 2.3 Propriétés des opérateurs : Priorité des opérateurs : décroissante * . + | est associatif | est commutatif | ( | ) | = | ( | ) = | | , , exp. reg. | = | , . Associatif mais pas commutatif . Distributif sur | , , exp.reg. . a un élément neutre .( | ) = | ( | ) . = | exp.reg. = = ( * )* = * propriété d’idempotence Rappels : * : J’ai 0, 1 ou plusieurs fois concaténé avec lui-même + : 1 ou plusieurs occurrences de ? : 0, 1 occurrence de ( | ) {n, m } : il y a entre n et m occurrences de + | = * * = * = + +| * = * = * | ( | ) * * | * ( | ) * =( * *)* ( | )* = * = ( * *)* = ( *)* = * Page 20 Théorie des Langages 3. Rapport entre ensemble régulier, expression régulière et grammaire régulière Lister et définir les Unités Lexicales comment Grammaire régulière passer de on y associe des Expressions régulières Gérer par un utilitaire nommé LEX on y associe un Automate régulier on le déduit en Automate optimal Génération de Programme d’Analyse Lexicale 3.1 Automate fini d’états réguliers Définition : Un automate fini d’états réguliers est un n-uplets ( n = 5 ) A = < E, VT, , S, F > E : est un ensemble fini d’états VT : Vocabulaire terminal ( CF Déf. ) est le vocabulaire sur lequel le langage a été écrit. : est un ensemble fini de transition Matrice : ( e, a ) = { e’ } Si A est dans l’état e, en lisant a VT, l’automate peut basculer dans l’un ou l’autre des états e’ ( e, a ) . S : est l’état initial dans lequel A se trouve au début de l’analyse F : est un ensemble d’états terminaux, dit d’acceptation, si A est dans un des états de F quand toute la chaîne W analysée a été lue, W L( A ) Remarque : S E, F E 3.2 Représentation des automates Page 21 Théorie des Langages 3.2.1 Représentation graphique l S l, c l, c I D F = { I, D } E = {S, I, D } S=S VT = {l, c } Graphe G orienté ( e, a ) = { e’ } s’écrit sur le graphe e a e’ 3.2.2 Représentation matricielle : Vt S I D L {i} {D} {D} C 0 {D} {D} Expression régulière associé à cet automate G = < VN , VT, P, S > S S état initial VN = {S, I, D } P= SlI IlD|cD| DlD|cD| Expression régulière : l(l|c)* 3.3 Automates déterministes 3.3.1 Définition : Un automate A est déterministe ( Automate Régulier Déterministe ) ARD s’il remplit deux conditions : - A ne comporte aucune transition vide ( e, ) = { e’} est une - transition ( vide ) - e E et a VT Card ( (e, a) ) 1 ( | ( e, a ) | 1 ) Remarque : Un automate non déterministe ARN ( ou AFN ) n’est pas optimal en exécution de l’analyse Pour transformer un ARN en ARD, il faut d’abord retirer les - transitions Page 22 Théorie des Langages 3.3.2 Fermeture réflexive et transitive des - transitions 0 ( e, ) = e e E i ( e, ) = { e’ E que l’on peut atteindre en i - transitions à partir de e } * ( e, ) = i0 i ( e, ) 3.3.3 Retrait des - transitions Soit A un automate ARN tel que A = < E, VT, , I , F > On lui associe un automate A ‘ sans - transitions A’ = < E’, VT, ‘, I ‘, F’ > I’ = I E’ = { I } { e’ tel qu’il existe une transition ( e, a ) contenant e’ } F' = { e' à E' tq il existe f à * (e', ) et f à F } F' est l'ensemble des états de E', qui dans A permettent d'atteindre un de ses états terminaux par 0, 1 ou plusieurs -transitions. Construction de ’ e1 e3 a 0, 1 ou plusieurs e2 Si e1 E’et e3 E’ alors ( e1, a ) = e3 ’ ’ = { (e1, a) = e3 tel qu’il existe e2 E et e2 *( e1, ) et ( e2, a ) = e3 } 3.3.4 Exemple : Page 23 Théorie des Langages a S T b U V F a S T U V F b epsilon T 0V U 0V 0 0 0 0 { T, F } 0 0 A’ = < E’, { a, b}, ’, S , F’ } E’ = {S, U, V } *( S, ) = { S, T, U, V } *( F, ) = {F } *( U, ) = {U } *( T, ) = {T, V, F } *( V, ) = { V, F, T } F’ = { S, V } ’ ( S, a) = { U } ( V, a) = {U } ( U, b } = {V } a a S U V b 3.5 Transformation ARN sans - transition ARD Page 24 Théorie des Langages 3.5.1 Algorithme : AN : Automate non déterministe sans - transition AN : < EN, VT, N , IN , FN > Initialisation : ID IN D 0 ED ID M0 Tant que e ED et e M Faire M e // e = ( x1,...,xj) xi EN Union affectation Pour tout a VT Faire Y = {x’ EN tel que ( xi, a ) = x’ avec 1 i j D ( e, a ) = Y ED Y Fin Pour Fin Tant que FD = { y ED tel qu’il existe xi y et xi FN y = ( x1,…,xi,…,xj) } 3.5.2 Exemple : VT AN R E 1 2 E 3 R 4 5 E R 1 2 3 4 5 E 2 0 3, 4 3 3, 4 5 0 Vt - {E, R } 0 0 0 0 0 3 0 0 On réalise le tableau suivant à partir du tableau ci-dessus : 1 2 3-4 3-5 3 R 2 0 3-5 3 3 E 0 3-4 3-4 3-4 3-4 Vt - {E, R } 0 0 3 3 3 Remarque : En fabriquant un ARD à partir d’un ARN. Page 25 Théorie des Langages On a un outil d’analyse lexical performant du point de vue de l’exécution mais on risque de produire beaucoup trop d’états. D’où la nécessité de minimiser l’ARD. 4. AFD ( ARD ) minimal : 4.1 AFD complètement spécifié On rajoute un état particulier R qui est l’état de rejet ( état poubelle ) de telle sorte que |( e,a ) | = 1 e E et a VT Si ( e, a) = 0 alors ( e, a) = R pour tout a on a ( R, a) = R // On ne peut pas sortir de l’état poubelle qui est un état dit absorbant. 4.2 Algorithme de réduction ( de minimisation ) 0 / AFD AFD complètement spécifié 1 / Initialisation : Partition de l’ensemble des états en deux classes a. Tous les états terminaux d’acceptation b. Le reste des états ( y compris l’état de rejet ) 2 / Tant que il n’y a pas convergence des partitions faire Pour tout a VT faire Si on transite avec a en sortant d’une classe vers deux classes alors scinder la classe de départ en deux Fin Pour Fin Tant que Tout les états d’une même classes sont fusionnés, les états terminaux sont les sous-classes du 1.a) 4.3 Exemple : 1 a 0 0 1 2 3 R c b 2 3 a 1 R R R R b 2 R R R R c R R 3 2 R c 1 2 3 0 R a R R R 1 R b R R R 2 R c R 3 2 R R 3 et 2 fusionnent 0 1 2 R a 1 R R R b 2 R R R c R R 2 R a Page 26 1 Théorie des Langages 0 b 2 c 5. Passage d’un automate à une Expression Régulière : a S d T c F e b f U S a T | bU T d | cU UeT|f Quel est le langage de S ? Si j’ai A A | L(A) = * T d | c e T | cf L( T ) = ( ce ) * ( d | cf ) Ued|ecU|f L ( U ) = ( ec ) * ( e d |f ) L( S ) = a ( ce ) * ( d | cf ) |b ( ec ) * ( e d |f ) 6. Expression régulière Automate : 6.1 Cas de base : E 0 E a I F Vt 0 epsilon 0 epsilon E a F epsilon 6.2 Récursion : R1 R2 Page 27 Théorie des Langages Expressions régulières R1R2 R1| R2 R1* R1 I1 epsilon R2 I2 F1 epsilon F2 R1R2 I1 epsilon F1 I2 I2 F2 R1 |R2 I I1 F1 n’est plus un état terminal I1 : Etat initial F2 : Etat final On ajoute ( F1, ) = I2 epsilon I1, I2 F1 et F2 restent des terminaux I1 et I2 perdent leur état initial on ajoute ( I, ) = { I1, I2 } F1 I2 F2 R1 R2 I R1* I R1 I epsilon I1, F Page 28 I1 F1 F E1 { I, F } I1, F Théorie des Langages 1 ( I, ) = {I1, F } 1 ( F1, ) = { I1, F } F : état terminal I : état initial L’implentation d’un mécanisme de passage d’une expression régulière à un automate nécessite l’utilisation d’une grammaire non contextuelle C’est ce que fait LEX ( UNIX) ou ANTLR ( WINDOWS ) 7. Intersection de deux automates : déjà déterministes Nombre pair de a et quelconques de b a b 1 2 b 1 2 a 2 1 b 1 2 3 4 a 3 4 b 4 3 a Nombre impaire de b et quelconques de a b a 3 4 a b a 2-3 1-3 2-4 1-4 1-3 2-3 1-4 2-4 b 1-4 2-4 1-3 2-3 Les états terminaux de l’intersection des automates ne doivent contenir que des états terminaux présents dans les automates « primaires ». 1-4 est terminal car 1 ET 4 le sont. a a 1-3 b b b b 2-3 2-4 a 1-4 a 8. Récapitulatif : Page 29 Théorie des Langages Définition d’Expression Régulière par Thomson AFN Algorithme de retrait des - transitions AFN sans - transition AFD Algorithme de minimisation AFD réduit Analyse syntaxique : Page 30 Théorie des Langages 1. Rappels et définition : En entrée de l’analyse syntaxique, il y a un flot d’unités lexicales ( issues de l’Analyse Lexicales ) qui sont le vocabulaire terminal de l’Analyse Syntaxique Ces chaînes vont être analysées par une cfg ( Context Free Grammar ) type 2. G = < VN, VT, P , S > où P sont les règles de production et S l’axiome On va numéroter les règles de production de 1 à p si p = |P| Exemple : G = < {S, A}, {a, b ,c}, P, S > avec P = 1 S aSaA 2 S b 3 AcA 4 Ac Soit w = aabacac la chaîne à analyser 1ière méthode : 1.1 Analyse gauche ( Analyse descendante / top-down ) *? Sw On dérive toute chaîne dérivable en développant l’élément de VN le plus à gauche. S aSaA aaSaAaA aabaAaA aabacaA aabacac 1 1 2 4 4 Suite de dérivation analyse gauche : 1, 1, 2, 4, 4 1.2 Analyse droite( Ascendante / Bottom-up ) On part de la chaîne et on remonte vers l’axiome en opérant des réductions ( inverse d’une dérivation ) c.a.d remplacer une partie droite de règle par sa partie gauche. En retournant la série de réduction, on obtient une dérivation droite de w. S aSaA aSac aaSaAac aaSacac aabacac 1 4 1 4 2 2, 4, 1, 4, 1 est une analyse droite de w S Page 31 Théorie des Langages a S a A a S a A b c c 2. Méthodes générales d’Analyse syntaxiques : Essai – Erreur ( Retour arrière / Back – tracking ) Objectif : Une analyse ou plusieurs analyses de w 2.1 Analyse top-down avec retour arrière : On suppose que l’on ait la grammaire suivante : G = < {S}, {a, b, c } , P, S > P= 1 2 3 S aSbS S aS S c Chaîne à analyser : w = aacbc S S a S b S a S b S c pas BON donc c a S a S c b S c S a S a S b S c Problème : La récursivité à gauche de la grammaire Page 32 Théorie des Langages Exemple : G = < {S, A, B}, {a, b}, P, S > P= 1 2 3 4 S Ab A AaB A a B a w = aaab S A … A b A a B a B Une solution est d’intervertir les règles 2 et 3 P= 1 2 3 4 S Ab A a A AaB B a S A a A b a B a Intervertir l’ordre des règles ne fonctionne parfois pas toujours comme dans l’exemple ci-dessous : G = < {S, A, B}, {a, b}, P, S > P= 1 2 3 4 5 S Ab S Ac A AB A a B a Page 33 Théorie des Langages Si les chaînes se terminent par c il faut permuter les règles 1 et 2 et dans ce dernier cas on n’arrive plus à analyser les chaînes se terminant par b 2.2 Analyse droite avec retour arrière : Utilisation ( Comme pour l’analyse gauche ) de deux piles CF : Gallaire p31 à 34 et Aho Ullman pp222-230 3. Transformation de grammaires : Caractéristiques gênantes : Ambiguïté et récursivité 3.1 Définitions : * . X est un symbole inutile s’il n’existe pas X x avec ,x et VT* . X est inaccessible : on ne peut retrouver X dans une chaîne dérivable à partir de S . G est libre d’ si G n’a pas de règle A avec A VN . G est sans cycles si on ne peut établir à partir de toute variable A VN + AA . G est propre : G est libre d’ , sans cycle, sans symboles inutiles ou inaccessibles 3.2 Factorisation à gauche : A 1 | 2 + SA OU w=x 1 2 Solution : A ( 1 | 2 ) AZ Z 1 | 2 Généralisation : Soit le plus long préfixe de longueur non nulle commun aux deux parties droites d’une règle alternante et l’ensemble des parties droites qui ne commencent pas par . A 1 |… | n | remplacé par AZ| Z 1| …| n 3.3 Récursivité à gauche : Page 34 Théorie des Langages 3.3.1 Récursivité directe à gauche : Exemple : A A | ( Cas simple ) L( A ) = * équivaut à A X X X | Cas général : A A 1|…|A n | 1| …|m L(A) = (1| …|m ) ( 1|…|n ) * équivaut à A 1X |…| mX X 1X| … | nX | 3.3.2 Récursivité indirecte à gauche : Exemple : 1 2 X Y a |X f |c Y Xb |d Pas 1 : Pas de récursivité indirecte pour l’instant, il faut retirer la récursivité directe L( X ) = ( Ya | c ) f* Pas 2 : 1 2 3 X YaZ | cZ Z fZ | Y Xb | d la 1 est traitée ( plus de récursivité ) la 2 est traitée ( pas de récursivité ) Pas 3 : On réécrit Y Xb |d en Y YaZb | cZb | d L(Y) = ( cZb| d) ( aZb)* 3 4 Y cZbW | dW W aZbW | la 3 est traitée la 4 est traitée 4. Deux opérateurs : Page 35 Théorie des Langages PREMSK ( ) et SUIVK ( ) ( FIRSTK ( ) and FOLLOWK ( ) ) 4.1 Définition de PREMSK ( ) : Si VT* alors PREMSK ( ) = { } si || k Si || > k alors {x tq = xy et |x| = k } Si V* - VT* alors PREMSK ( ) = W VT* tq |w| = k * et Wx, x V* OU ( Union ) * W VT* tq | W| < k et W 4.2 Définition SUIVK ( ) : V* et k entier SUIVK ( ) = {W * VT* tq S et W PREMSK ( ) } Axiome S S AB A aC |a Bb Cc PREMS1 ( C ) = {c } PREMS1 ( B ) = {b } PREMS1 ( A ) = {a } PREMS1 ( S ) = {a } PREMS2 ( C ) = {c } PREMS2 ( B ) = {b } PREMS2 ( A ) = {ac, a } PREMS2 ( S ) = {ac, ab } SUIV1 ( S ) = { } SUIV1 ( A ) = {b } SUIV1 ( B ) = { } SUIV1 ( C ) = {b } 3. Analyse LL(K) : Page 36 Théorie des Langages L(eft) de gauche à droite Analyse gauche top-down On va regarder k symboles vers l’avant ( déterminisme ) Exemple : G = < {S} , {a, , c }, { ( SaSa | bSb | c ) } , S > 1 2 3 3.1 Définition d’une grammaire LL(k) : G est LL(k) lorsque Page 37