Theorie_des_langages

publicité
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
aE
Ensemble vide

1 – Réunion, Intersection, Différence :
Réunion :

Si = { x | x  S1 … ou  Si … ou  Sn }
1in
Intersection :
 Si = { x | x  S1 … et  Si … et  Sn }
1in
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
AB
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 )  EEE, 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+  {  } = k0 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 :
AB = { W  A OU  B }
AB = { 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* = k0 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=VK
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, +,  }, { (EE+E) , ( EEE), ( Ea), ( Eb )} , E >
{ (EE+E |EE | a | b ) }
G2 = < {B} , { x, y, , , }, {( B x | y | BB | BB | 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
AB 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}, { ( S0A1), ( 0A00A1), ( 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
ps 

ps

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}, { SaSb |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 :
pst
|
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 >
E2+35
*
a. E  [ E+E]1  [ E + [ EE ]2 ]1  [ [2]3 + [ [3]3 [5]2 ]1
*
b. E  [ EE]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 , cS2S2c, bS2bb}, { 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 LiL j inf(i, j)
L3L’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=
SlI
IlD|cD|
DlD|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,  ) = i0  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
M0
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
UeT|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 )
Ued|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
AcA
4
Ac
Soit w = aabacac la chaîne à analyser
1ière méthode :
1.1 Analyse gauche ( Analyse descendante / top-down )
*?
Sw
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
+
AA
. G est propre : G est libre d’ , sans cycle, sans symboles inutiles ou inaccessibles
3.2 Factorisation à gauche :
A   1 |  2
+
SA
OU
w=x
   1
   2 
Solution :
A  ( 1 | 2 )
AZ
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
AZ|
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
Bb
Cc
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 }, { ( SaSa | bSb | c ) } , S >
1
2
3
3.1 Définition d’une grammaire LL(k) :
G est LL(k) lorsque
Page 37
Téléchargement