Vous êtes sur la page 1sur 12

Chapitre 3 :L’analyse syntaxique

Chapitre III – Analyse syntaxique.

1. introduction

Gestion des
Erreurs

Programme Analyse Entités Analyse Arbre


source lexicale lexicales syntaxique syntaxique

Table des
symboles

-L'analyse lexicale a pour but à partir du Programme source qui est une suite de caractère de
former des entités lexicale.
- L'analyse syntaxique a pour rôle la vérification de la forme ou encore la bonne disposition de
de la suite des entités lexicale, on parlera alors de la syntaxe du langage.
La vérification est faite à l'aide de la grammaire spécifique au langage appelée grammaire
syntaxique.
2. Rappels

3. Les méthodes d'analyse syntaxique :


3.1 Type de méthode d’analyse syntaxique :
Le but d’analyseur syntaxique est de vérifier la disposition des entités lexicale du programme
source, en générant un arbre syntaxique.
Il existe deux méthodes pour la construction de l’arbre syntaxique.
a) méthode descendante :
Consiste à partir de l’axiome de la grammaire faire des dérivations jusqu'à obtenir la chaine à
analysé. En général l’analyse commence par le terminal le plus à gauche.
b) méthode ascendante :
Contrairement aux méthodes précédentes, elles consistent à faire des réductions sur la chaîne
jusqu'à obtenir l’axiome.
1/12 Aridj Mohamed
Chapitre 3 :L’analyse syntaxique
3.2 Méthode d’analyse descendante
3.2.1 Méthodes d’analyse descendantes non déterministes :
Dans ce type de méthode on ne peut pas connaître préalablement à une étape d’analyse, quelle est
la prochaine production à appliquer.

3.2.1.1- Analyse par descendante parallèle :


Consiste à remplacer un Non- terminal par tous ces MDP(en même temps ), jusqu'à obtention
de la chaine ou bien aucune alternative ne peut être choisir.
Algorithme d’analyse

1. Tanque tête – cible = non-terminal alors


-Remplacer le non –terminal par tous ces MDPS
Jusqu'à obtention d'un terminal.
2. Comparer le terminal avec le terme courant de la chaîne à analyser
Si égalité Alors
Si tête –cible = fin de chaîne. Alors
La chaîne est acceptée.
Aller à Fin
Sinon
Avancer dans la chaîne et dans la cible
Aller à 1.
Sinon
Blocage.
Passer à une autre alternative
Fsi.
3. FIN

Exemple :
Bloc  Début LD ; LI Fin .
G LD  d/d , LD.
LI  i /i , LI.
La chaîne à analyser est : début d , d, i , i fin.
Solution :(en cours)

2/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

3.2.1.2 Analyse prédictive avec le retour – arrière:


Elle consiste à essayer de construire l’arbre syntaxique en profondeur, c'est-à-dire pour chaque
MGP le replacer par l’un de ces MDP si on aboute à chaîne alors l’algorithme ce termine si
blocage on fait un retour arrière pour choisir un autre MDP.
Exemple :
Soit la grammaire suivante S  c/ cA
A  b/ bc
Analyser la chaîne c b c #.

S# S# S#

c # c A # c A
(1,2)
c # b c #
Avancer blocage blocage Chaîne acceptée

Exemple :( en cours )

3.3.2 Méthodes d'analyse syntaxique déterministes:


Contrairement aux méthodes précédente, ces méthodes se déterministes i e sous retour arrière,
seule l'alternative susceptible de correspondre est choisie.

3.3.2.1 Analyse prédictive LL :


a) Introduction
Il est possible de construire un analyseur prédictif non récursif en utilisant une pile de façon
Explicite.
Le Problème est on a y’ont une Grammaire et une chaîne d'entrée de déterminer à chaque étape
de l’analyse la règle de production à appliquer en partant de l'axiome afin d'arriver à la chaîne.
L'analyseur fait la recherche dans une table appelée table d'analyse
b) Définition :
Une Grammaire est LL (1) si l'on arrive à déceler de l'appartenance d'une chaîne à un langage
ou vu d'1 seul caractère.
c) construction de la table d’analyse LL(1) :
la table d’analyse LL(1) est une table de deux dimensions dont les linges correspondent aux non
terminaux et les colonnes correspondent aux terminaux du langage. Chaque case de la table est
soit vide ou bien contient une règle de production de la grammaire. Le processus de construction
de la table d’analyse consiste à déterminer le contenu de chaque case.

3/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique
Deux nouvelles notions sont nécessaire pour la construction de la table d’analyse : l’ensemble
des débuts et des suivants d’un non terminal.
c).1 calcule des l’ensemble des début d’un non terminal :
Intuitivement l’ensemble des débuts d’un non terminal A est l’ensemble des terminaux par qui
les sous chaînes générées par A peuvent commencer. Le calcule de l’ensemble des débuts est
réalisé par l’algorithme suivant :

Soit G(T,N,S,P) une grammaire


1. pour chaque règle de production ( X  aY) de P tel que X,Y  N et a T*
Ajouter a à l’ensemble débuts de X ( a debut(X))
2. pour chaque règle de production X  Y1 Y2 … Y3 de tel que X,Yi  N alors
a) ajouter l’ensemble des début de Y1 sans  à début de X
Début (Y1) –   debut (X)
b) si pour j=1..i<n Yj   alors ajouter l’ensemble des début de Yi+1
sans  à début de X
debUT (Y i+1 ) –   debut (X)
c) si pour j=1..n Yj   alors ajouter  à début de X
  debut(X)

c).2 calcule de l’ensemble des suivant d’un non terminal :


Intuitivement l’ensemble des suivants d’un non terminal A sont les terminaux qui peuvent
apparaître juste adroite du non terminal A. le calcule s’effectue par l’algorithme suivant :
Soit G(T,N,S,P) une grammaire

1. Si S est l’axiome de la grammaire ajouter # (marque de la fin de chaine ) à suivant de S


#  suivants ( S)
2. Si A XaB tel que A,X,B des non terminaux et a terminal alors ajouter a à suivant de X
a suivants ( X)
3. Si A   B     , , ( TUN)* , BN
debut (  ) – (  )  Suivant ( B).
4. Si A   B alors A,B N
suivant ( A)  suivant ( B).

4/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

c).3 algorithme de construction de la table d’analyse LL(1)


Pour la construction de la table d’analyse LL(1) on utilise l’algorithme suivant :

Pour chaque terminal A de la Grammaire G


Faire pour chaque régle du type ( A )
Faire pour chaque a  Debut (A) – (  ) Faire
M A, a : = A  
Si   Debut ( A) alors.
Pour chaque suivant a de A faire
M A, a : = A  .

Remaques :
1. chaque entrée de la table contient une règle de la grammaire, si elle est vide elle correspond
à une erreur syntaxique.
2. pour construire la table d’analyse LL(1) on procède comme suit :
a) on vérifie que la grammaire est LL(1)
b) on calcule des débuts et les suivant
c) on construit la table LL(1).
c).4 Fonctionnement de l'analyseur :
Nous disposons de la chaîne d'entrée d'une table d'analyse la chaîne d'entrée comporte une
marque de fin ().
La pile à un instant donné contient des symboles de la grammaire avec  comme marque du Fin
de la pile.
Initialement la pile contient l'Axiome de la grammaire au dessus de  : (  z).
La table d'analyse est à 2 dimensions. Les lignes contiennent les non terminaux, les colonnes
contiennent les terminaux.
Case T[A,a] de la table contient le MDP à appliquer à la vue de a.

5/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

Les trois cas suivants sont possibles:


1. Si Sp = Tc =  alors
La chaîne est acceptée.
2. Si Sp est non terminal alors consulter la table d'analyse.
Pour déceler de l'action à exécuter
Si M ( Sp, Tc) =  alors
Erreur syntaxique
Sinon
Empiler le MDP de la règle contenu dans la case M ( sp, tc) .
1. Si Sp est un terminal
Si Tc=Sp alors
Avancer dans la chaîne et dépiler SP ( sommet de pile).
Sinon
Erreur syntaxique

Exemple
On utilisant la table d’analyse de exemple précédant analyser la chaîne : i * ( i + i ) # ?

3.4. Analyse syntaxique ascendante :


Introduction
L’analyse ascendante consiste en un processus qui peut être considéré comme la réduction
(par opposition à réduction) d'une chaîne C vers l'axiome S
A chaque étape de la réduction, une sous chaîne correspondant à la partie droite d'une
production est remplacé par la partie gauche.
Dans ce type d’analyse le problème primordiale et de choisir la sous chaîne candidate pour la
réduction. Cette sous chaîne est appelée HANDEL .
Construction d'analyse LR
Un analyseur LR simule un automate d’états finis à travers une table d’analyse.
Il existe principalement 3 types de table : SLR,LR,LALAR.
La construction de ces tables nécessite l’introduction d’un nouveau concept : ITEM et on définis
deux opération sur l’ensemble des ITEM : la fermeture et le successeur

6/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique
1. Notion d' item
Définition :
Une configuration LR [ 0] d'une grammaire G est une production marquée de la forme :
[ A  1 . 2 ] où : A  1 2 est 1 production de la grammaire G.
Le '. ' désigne la marque
Les crochets [] aide à distinguer 1 item de la production associée.
En général plusieurs tems peuvent être associer à une même production
Exemple :
À la production E  E+ T on peut associer les ITEMs suivant [ E  . E+T], [ E  E.+T],
[ E  E+.T], [ E  E+T.]

Remarque :
1. la production A   donne l' item [ A  . ]
2. intuitivement la partie droite du point (.) d’un item désigne la chaîne qui a été reconnue à
un moment donné au cours de l'analyse.
Par exemple l’item [E  E.+T] signifie que l'on a reconnu une chaîne dérivable de E et que
l'on espère voir en entrée un "+" suivi d'une chaîne dérivable de "T" .
3. Le but d’items est de construite à partir des productions de la grammaire, et non des calculs
des contextes gauche et doit , un automate déterministe pour reconnaître les chaînes
4. les items sont regroupés en ensemble qui vont constituer les états de l'automate
Calcule de l’ensemble d’items :
On définit 2 opérations sur un ensemble d'items la fermeture et le successeur
a) L'opération fermeture d'item
Définition :
Soit I un ensemble d'items d’une un Grammaire G on appel fermeture de l’ensemble I et on
note fermeture( I ) , l'ensemble d'items construit à partir de I par les 2 règles suivants:

Règle 1 : Initialement, placer chaque item de I dans fermeture [ I ].


Règle 2:
Répéter
Si [ A   1. B  2 ] est dans fermeture ( I ) et B 
est une production de G , ajouter l'item [ B  .  ]
à fermeture ( I ) , s'il n'y n'est pas déjà .
Jusqu'à (aucun nouvel item ne peut être rajouté à fermeture ( I) )

7/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

Exemple :
Soit la grammaire d’expression arithmétique suivante :

ZE
G EE+T/T/E–T
T  i / ( E)

Calculer la fermeture l’ensemble d’items I0 =[ Z  . E ] ?


Solution
I0= fermeture ([ Z  . E ] ) = [ E  . E+ T ] , [ E  . T ], [ E  . E- T ]; [ T  . i] ,
[ T  . ( E) ].

Remarques
1. Cela signifie que l'analyseur dans l'état [ Z  . E ] s'attend à reconnaître une chaîne dérivable
de E , les chaînes dérivable de E sont celle qui sont produite de E soit de T , E+ T ou E- T; et
les chaînes dérivable de T commencer soit par un i ,soit par '(' .
2. L'item [Z  . E] et l'item de base.
b) L'opération Successeur :
Elle permet la reconnaissance de symboles.

Définition :
Etant données une Grammaire G et un ensemble d'items
I = [ A  . X] X TUN : on appel successeur de I par le symbole X et on note goto(I,X )
l’ensemble I’
I’=GOTO ( I, X) = fermeture ( J) et J = [ A   X.]

Exemple :
I1 = GOTO ( I, E) = [ Z  E.], [ E  E. + T] , [ E  E. - T].
c) Construction des ensemble d'item LR [ 0]
1.On démarre le processus avec l'item [ Z . S] ( S étant l'axiome)
2. on associe à chaque ensemble des items un état de l'automate.
3.un état final contient un item de réduction (contenant au moins un
item dont le point est eu fin de règle).

8/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

Exemple :
Soit la grammaire G suivante :
Z E
G= E E – T / T.
T F T/ F.
F i / ( E )
Calculer les ensembles d’item associés à cette grammaire ?
d) construction de la table d’analyse SLR
La table d’analyse SLR est une table de deux dimensions, les linges représentent les ensemble
d’items de la grammaire et les colonne représentent les symboles de la grammaire (T  N)
La construction de la table d’analyse est relativement simple elle est réaliser par l’algorithme
suivant :

Soit T : la table d’analyse SLR


Ii : un ensemble item LR(0)

Etape 1 Construire les ensemble d'items LR ( 0) [collection d'item LR (0 )].


Etape 2 L'état i est construit à partir de l'ensemble d'items Ii de la manière
suivante :
Cas 1 : Si [A .a] est dans Ii et GOTO ( Ii, a ) = Ij alors :
T [i , a]  Décalage vers l’état j.(Dj)
Cas 2 : Si [ A .] est dans Ii alors :
pour chaque d  suivant ( A) . [ avec A  Z] faire :
T [i , d]  Réduction A  (R A  )
Cas 3 :Si [ Z S.] est dans Ii faire :
T [i , #] = Accepté .
Cas 4 :Si GPTO ( Ii , A ) = Ij faire :
T [i , A] = j

9/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

Exemple :
Soit la grammaire G suivante

Z E
E E – T / T.
T F  T/ F.
F i

Construire la table d’analyse SLR de la grammaire G ?


e) Algorithme d’analyse SLR :
On dispose d’une chaîne à analyser, d’une pile d’analyse et une table SLR T.
Algorithme d’analyse peut être formuler comme suit :

Sp : le sommet de la pile.
Tc : pointeur de la chaîne.
1. SI T[Sp,Tc] = Dj alors
Empiler Tc
Empiler j
Avancer dans la chaîne
2. SI T[Sp,Tc] = R A α alors
Dépiler 2* | α | (| α | : désigne la taille de α)
Empiler A
Empiler T[A,Sp]
1. SI T[Sp,Tc]= accepter alors
Chaîne syntaxiquement correcte
2. SI T[Sp,Tc]=  alors
Erreur syntaxique (chaîne non acceptée)

10/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

3. Analyse LR ( 1) canonique:
3.1 introduction :
Dans cette analyse, l'information de prévision est calculée comme partie de l'automate. Ceci
va nous permettre d’analyser un espace plus large de grammaires.
On étend la notion d’item LR(0) pour prendre en charge l’information de prévision.
3.2 Définition
Un item LR(1) est un items à deux composantes de la forme:  A   . , 
Ou la première composante est une production marquée et  est un symbole de prévision
appartenant à T U  
3.3 Construction de l’analyseur LR(1)
Un analyseur LR (1) peut être généré de manière similaire à celle utiliser pour l'analyseur SLR
(1). La différence essentielle est que pour l'analyseur LR (1) les symboles de prévisions de l'item
doivent être aussi déterminés.
a) calcule de l’ensemble des items LR(1) :
Pour le calcul des items LR (1).
L'opération successeur est la même que celle pour les items LR (o).
L'opération fermeture est un peu plus complexe elle est calculée par l’algorithme suivant :

Sot I un ensemble d'items LR(1)


Fermeture (I):.
Répéter
1. ajouter tous les items de I à fermeture(I)
2. Pour chaque item de la forme  A.x ,c
de l'ensemble I et chaque production x   de G
ajouter à fermeture(I) tous les items de la forme :
x ., d ou d  début (  c)
Jusqu'à aucun nouvel item ne peut être ajouté à fermeture(I).

Exemple:
Soit la grammaire G suivante
ZS
G= S AA
AaA/b

11/12 Aridj Mohamed


Chapitre 3 :L’analyse syntaxique

b) Algorithme de construction de la table LR ( 1) :


La table LR(1) a la même structure que celle de SLR , elle est construite de la manière suivante :

Cas 1 : Si [ A . u, v] Ii et GOTO ( Ii, u) = Ij  T U  #  : faire


T [ i , u] = D , j
Cas 2 : Si [ A ., u] Ii Faire :
T [ i , u] = RA 
Cas 3 : Si [ Z S. ,# ] Ii Faire :
T [ i , # ] = Acceptée.
Cas 4 : Si GOTO ( Ii, A) = Ij Faire :
T [ i , A ] = j.

Remarques
a) les entrées indéfinies sont des erreurs.
b) l'état initial de l'analyseur est I0.

Exemple :
Construction de la table LR(0) de la grammaire précédente ?

c). l’analyseur LR(1) :


L’algorithme n’analyse LR(1) a le même fonctionnement que celui de l’analyseur, SLR
Exemple :
Analyser la chaîne abb # on utilisant la table LR(1) précédente ?
Solution

12/12 Aridj Mohamed

Vous aimerez peut-être aussi