Vous êtes sur la page 1sur 51

Faculté des Sciences de Monastir

Département Informatique

Cours:Techniques
Cours: Techniquesde
deCompilation
Compilation
Cours: Techniques de Compilation
2éme Licence Fondamentale en Science de l’Informatique
Enseignante : Dr. Fatma SBIAA
AU: 2019/2020
Chapitre 4: Analyse Syntaxique
1.Le rôle d’un Analyseur Syntaxique (Parser)
2.Grammaires
2.1 Définitions et exemples
2.2 Dérivation
3. Types des grammaires
4. Grammaire non contextuelle (BNF)
5. Méthodes d’analyse syntaxique
3.1 Analyse Descendante
3.2 Analyse Ascendante

2
FSM AU:2019/2020 LFSI2 F. SBIAA
1. Le rôle d’un Analyseur Syntaxique (Parser)
Analyser un langage consiste à vérifier la syntaxe du code source et signaler les
erreurs syntaxiques qui correspondent au cas où la suite de tokens n’est pas un mot
du langage.
 Il s’agit de trouver la (ou les) arbres de dérivation correspondantes:
Regrouper les unités lexicales du programme suivant des structures
grammaticales qui seront employées par le compilateur pour la synthèse les
résultats.
Ces structures grammaticales permettent de construire une représentation
syntaxique du code source : structure en arbre.
On note que durant cette phase, les informations à utiliser sont enregistrées
dans la table des symbole issue de l’analyse lexicale. Où, à toute valeur
lexicale on associe un id pointant vers la table des symboles.
3
FSM AU:2019/2020 LFSI2 F. SBIAA
1. Le rôle d’un Analyseur Syntaxique (Parser)

Analyseur Mots Analyseur


Arbre (AST)
lexical (tokens) syntaxique
Automate à pile

Générateur
d’analyseur syntaxique

Grammaire non contextuelle (BNF)???


4
FSM AU:2019/2020 LFSI2 F. SBIAA
1. Le rôle d’un Analyseur Syntaxique (Parser)
Les Outils d’Analyse
Les outils comme ocamllex et ocamlyacc font appel à des algorithmes
complexes de calculs d’automates:
L’analyse lexicale : les expressions régulières et les automates finis.
L’analyse syntaxique : on utilise les grammaires non contextuelle
pour décrire la syntaxe et les automates à pile pour la reconnaître (une
pile permet de stocker les résultats intermédiaires du processus
d’analyse).
5
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Dans cette section, nous verrons comment les grammaires servent à la génération
de langages:
Au lieu de considérer des machines qui reconnaissent un langage donné, on construit
un ensemble de règles qui servent à construire et reconnaître les mots d’un
langage.
Une grammaire se définit par des symboles terminaux, non-terminaux et des
règles de dérivation.
Les tokens fournis par l’analyseur lexical correspondent aux terminaux de la
grammaire.
Les actions associées aux règles permettent de construire les AST (Abstract
Syntax Tree ou Arbre de syntaxique abstraite) .
Un mot est reconnu si on peut construire un arbre de dérivation syntaxique
dont les feuilles sont les terminaux et les nœuds correspondent aux règles.
6
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
 Pourquoi les grammaires??
Les expressions régulières ne sont pas suffisantes pour représenter tous les langages de
programmation.
Cependant, une grammaire repose sur l’utilisation d’un mécanisme génératif capable de
produire tous les mots d’un langage donné.
2.1 Définitions et exemples
 Définition 1:
Une grammaire est un quadruplet G = (VT, VN, S, P) où:
VT : Vocabulaire Terminal qui représente le vocabulaire du langage. .
VN : Vocabulaire Non-terminal, (VN ∩ VT = ∅)
S : Le symbole de départ, axiome de la grammaire: SЄ VN (non-terminal)
P : Un ensemble de règles de la forme A → B, A ≠ ε, où A et B Є (VN ∪ VT)*
Une règle α → β veut dire que α peut être réécrit en β
Cela signifie que chaque occurrence de la chaîne α dans la chaîne d'entrée peut être remplacée par la chaîne β
7
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
 Les règles de réécriture P (dites productions ou règles de substitution) sont
formées d’un terme de gauche, d’une flèche () et d’un terme de droite.
 Les termes gauche et droit peuvent être n’importe quelle combinaison de symboles de
VT ou de VN, pourvu qu’il y ait au moins un symbole de VN à gauche.
 Le côté droit peut être vide, ce qui est indiqué par un  (ou ). On parle alors de
règle-.
Convention
• S est le symbole initial.
• Les minuscules sont des symboles terminaux.
• Les majuscules sont des symboles non terminaux.
Cette convention permet de simplifier la description d’une
grammaire en donnant seulement la description des règles P.
8
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exemple 1:

9
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exemple 2:
Voici une grammaire de phrase(VN, VT, S, P) où:
 VN={S, A, B, C};
 VT={a, b, c};
 S est le symbole de départ;
 P= { SASC
SB
BbB
B
Aa
Cc}
10
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation

• Une grammaire génère une séquence de symboles terminaux par


dérivation.
• Une dérivation est une suite d’étapes où chaque étape consiste à
remplacer (tant que c’est possible) un patron apparaissant du côté gauche
d’une règle de P par le côté droit correspondant.
• La chaîne initiale est le symbole de départ S de la grammaire.

11
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
A partir de l’exemple de grammaire précédent (exp2), on obtient le mot
abc par la dérivation suivante:

Rappel de la description de
grammaire
12
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
On peut écrire les dérivations sous une forme plus compacte si on n’écrit
pas explicitement les règles utilisées.
Par exemple, la dérivation précédente peut être écrite comme suit:

S ⇒ ASC ⇒ aSC ⇒ aBC ⇒ abBC ⇒ abC ⇒ abc

La transformation résultant de
l’utilisation d’une règle de réécriture est
indiquée par la flèche ⇒.
13
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation

•Généralement, il n’y a pas d’ordre d’utilisation des règles de dérivation.


•Par exemple, on peut obtenir la séquence abc avec la dérivation suivante:

S ⇒ASC ⇒ASc ⇒aSc ⇒aBc ⇒abBc ⇒abc

14
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 1:
Soit un exemple de grammaire où le côté gauche des productions est plus complexe.
Cherchons une dérivation qui nous permet d’avoir la séquence aabbcc.

• Les règles de réécriture sont:


S  abNSc Correction
On peut dériver la séquence aabbcc comme suit:
S
bNa  abN S ⇒ abNSc ⇒ abNabNScc ⇒ abNabNcc ⇒
bNb bbN aabNbNcc ⇒ aabNbcc ⇒ aabbNcc ⇒ aabbcc
bNc  bc Remarque: Pour chaque étape, on remplace ce qui est
écrit en rouge en utilisant la règle adéquate.

15
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 2:
Soit G = (VN, VT, S, P) la grammaire dont les règles de réécriture sont définies come suit:
S  AB
A aA
B Bb
A 
Bb
1) Donner VN et VT selon la convention.
2) Dire si les séquences suivantes sont générées par cette grammaire. Si oui donner une
dérivation, si non dire pourquoi.
• aabb
• abbb
• 
16 • ba
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 2: (correction) S  AB
A aA
1) Donner VN et VT selon la convention. B Bb
VN ={S,B,A} A 
Bb
VT={a, b, }
2) Dire si les séquences suivantes sont générées par cette grammaire. Si oui donner une
dérivation, si non dire pourquoi.
• aabb oui SABaABaaABaaBaaBbaabb
• abbb oui SABaABaBaBbaBbbabbb
•  non, car d’après les règles de dérivation on a SAB et à partir de
B on a pas une règle- pour générer le symbole terminal  .
• ba non, car d’après les règles de dérivation on peut obtenir des mots
qui commence par une suite de a (éventuellement zéro) et qui se
termine par une suite de b (au moins un seul symbole)
17
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Définition 2:
Soit G = (VN, VT, S, R). Si VT   où  est un alphabet, on dit que G est une grammaire sur .
Soit L(G) = {wVT*: w est dérivée de S}.
On dit que L(G) est le langage généré par G.
Remarque importante : Une grammaire définit un seul langage. Par contre, un
même langage peut être engendré par plusieurs grammaires différentes.
Exercices
• Dire quel est le langage généré par chacune des grammaires suivantes:
1) S  AB
A aA 2) S aSb
B Bb S ab
A  Réponse: L = {anbn: n N+ }
B b
18 Réponse : L = {a nbm : m N+ et n N }.
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Une grammaire peut être:
-sans restrictions (ou de type 0) si toutes ses règles de production
sont sans restrictions.
-dépendante du contexte (Contextuelle ou de type 1) si toutes
ses règles de production sont dépendantes du contexte.
-hors contexte (ou de type 2) si toutes ses règles de production sont
hors contexte.
-Régulière (ou de type 3) si elle est régulière à droite ou régulière à
gauche. Une grammaire est régulière à gauche si toutes ses règles sont
régulières à gauche et une grammaire est régulière à droite si toutes ses
règles sont régulières à droite.
type 3  type 2  type 1  type 0
19
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
 Type 2: grammaire algébrique (hors-contexte)
Toutes les règles sont sous la forme: α → β avec α Є VN ; et β Є (VN U VT ) *
Exemple :
Soit L={an bn /n ≥1} G= SaSb|ab

 Type 1: grammaire à contexte lié


Toutes les règles sont sous la forme:
α → β avec α Є (VN U VT )+ , β Є (VN U VT )* et | α |<=| β |

Exemple :
Soit L={anbn cn/n ≥0}
20
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires

3.1 Grammaire régulière :


Une grammaire régulière est une grammaire avec les restrictions suivantes:
– Le côté gauche des règles consiste en un seul symbole non terminal.
– Le côté droit des règles est:
• soit un symbole terminal suivi d’un symbole non terminal,
• soit un seul symbole terminal,
• soit .

Toutes les règles sont sous la forme: α → x ou α → xβ Avec x Є VT ; α et β Є VN


Exemple 1:
Pour un langage L={a*}; SaS ou SSa
21
FSM AU:2019/2020
Sε LFSI2
Sε F. SBIAA
3.Types des Grammaires
Exercice 1:
1. Dire si les grammaires suivantes sont régulières

Non, à cause des règles SAB et BBb

Non, les deux règles violent les restrictions des grammaires régulières
2. Construire une grammaire régulière générant le langage L:{ apbcq :p N et q N+}
Réponse: SaS CcC
SbC Cc

22
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Exercice 2: <expression>  <terme> | <expression> + <terme>
Considérons la grammaire suivante : <terme>  a | b | c
ST|S+T
T  a | b| c
 S et T sont des symboles non-terminaux,
 +, a, b et c sont terminaux
1. Noter la définition récursive de S, permettant de définir les langages de cardinal infini
à partir d'un nombre fini de règles (Exemple : montrer que b+a+a est un "mot" du
langage défini par cette grammaire).

Réponse: SS+TS+T+TT+T+Tb+T+Tb+a+Tb+a+a
On peut donc dire que cette grammaire définie les langages de cardinal
infini.
23
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)

Généralement, les analyseurs syntaxiques des langages de programmation sont


basés sur des grammaires non-contextuelles.
En fait, Chomsky (en 1956) a choisi ce nom par contraste avec
ses grammaires contextuelles (type 1) où on peut mettre des conditions
pour l’application d’une règle.
Par définition, une production non-contextuelle se compose d’:
 un non-terminal
 une suite de symboles terminaux

24
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Nous utiliseront ici un seul symbolisme, parmi les plus célèbres, pour représenter les
grammaires : La formalisation BNF.
BNF signifie « Backus Naur Form », du nom de ses inventeurs (utilisé pour la définition
d ’Algol 60, vers 1958). Symboles:

Notations:
Terminaux: les minuscules, chiffres, symboles d’opérateurs, symboles en gras
Non-terminaux: majuscules: A,B,C,S ; entre <crochets>
Symboles: X,Y, Z
Chaînes de terminaux: u, v, w
25 Chaînes de symboles: a, b, g
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Vocabulaire non-terminal

Exemple1: < INSTRUCTION >: : = if < EXPR > then < INSTRUCTION > else <INSTRUCTION >

vocabulaire terminal

La règle pour un non-terminal A regroupe toutes les productions de A:


Exemple2:
< INSTRUCTION > : : = if < EXPR > then < INSTRUCTION > else < INSTRUCTION >

| while < EXPR > do < INSTRUCTION >


| <VARIABLE> := <EXPR> | …
26
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Exemple3:
Pour Pascal, on reprend :
S = la catégorie des textes complets : < PROGRAMME >

VT = les symboles reconnus lors de l’analyse lexicale : mots-clés: if,


identificateurs: x, y ...
VN = les catégories syntaxiques telles que < PROGRAMME >, < INSTRUCTIONS >,
< EXPRESSION >

P = les productions de la grammaire

27
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Exemple 4:
Pour un programme écrit dans un langage très élémentaire, on commence par introduire le mot clé
"PROGRAMME" suivi d’une suite de déclarations, puis le mot clé "debut" suivi par la suite
d’instructions ensuite le mot clé "fin" et un point-virgule pour finir.
On peut ainsi définir la grammaire suivante pour décrire un programme.

<PROGRAMME>::= PROGRAMME <SUITE_DE_DECLARATIONS> debut <SUITE_D_INSTRUCTIONS> fin ;


<LETTRE>::= a|b|c|…|z|A|B|…|Z
<CHIFFRE> ::=0|1|2|3|4|5|6|7|8|9
<TYPE>::=reel | entier| char
<IDENTIFICATEUR> ::= <LETTRE>{<LETTRE> |<CHIFFRE> }
<SUITE_DE_DECLARATIONS> ::={<DECLARATION>}
<DECLARATION>::= <IDENTIFICATEUR> : <TYPE> ;
<SUITE_D_INSTRUCTIONS> ::= <INSTRUCTIONS> { <INSTRUCTIONS> }
<INSTRUCTIONS> ::=…
28
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
Comme nous l’avons indiqué au début de ce chapitre, le rôle d’un analyseur
syntaxique est de vérifier la syntaxe du code source et signaler les erreurs existantes
en générant l’arbre syntaxique abstraite AST du code source.

Nous allons utiliser les grammaires qui permettent une spécification facile et
précise d’un langage de programmation. Il s’agit donc de vérifier que les lignes de
code respectent bien les règles de la grammaire correspondante.

Pour les classes de grammaires usuellement utilisées il existe des outils efficaces
(Yacc, Bisons,. . .) permettant d’analyser automatiquement un fichier source à
partir d’une grammaire.

29
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
Exemple: Soit la grammaire suivante qui décrit une phrase:
<PHRASE> ::= <SUJET> <VERBE>.
<SUJET >::= Jean | Marie
<VERBE >::= mange | parle
1. Construire l’arbre syntaxique de la phrase suivante: Jean mange.
phrase En analysant l’Arbre syntaxique de la
sujet verbe . phrase « Jean mange. » on peut déduire
qu’elle vérifie bien la syntaxe définie par la
Jean mange . grammaire correspondante

Mais c’est plus compliqué pour les langages de programmation!!!!


D’une façon générale, un mot m formé de terminaux est reconnu par la grammaire s’il
existe un arbre de dérivation syntaxique dont les feuilles correspondent au mot m et les
noeuds aux règles de production, la racine étant le symbole initial.
30
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
Comme le langage à reconnaître est context-free, un Parser aura le
fonctionnement d’un automate à pile (PDA).
Il existe plusieurs méthodes d’analyse syntaxique. Nous verrons dans ce cours
2 grandes classes de Parsers :
Méthodes descendantes (top-down) : depuis le symbole de départ (la
racine), elles essaient de « descendre » vers la suite de tokens (les feuilles).
Méthodes ascendantes (bottom-up) : depuis la suite de tokens (les
feuilles), elles essaient de « remonter » vers le symbole de départ (la racine)
telle que la séquence inverse soit une dérivation du mot chercher.

31
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Idée : Cette analyse correspond à un parcours descendant gauche (parce
qu’on lit de gauche à droite). Il s’agit de deviner à chaque étape quelle est la
règle qui sert à engendrer le mot que l’on lit.
Les méthodes déterministes les plus efficaces connues à l’heure actuelle
sont : l’analyse prédictive et la descente récursive.
Lorsque le langage d’implémentation dispose de la récursivité, il est
souhaitable d’utiliser la descente récursive dans le cas contraire, l’analyse
prédictive affirmera son existence.
32
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Cette analyse utilise une table appelée table prédictive, les lignes de cette table sont
indicées par les symboles non terminaux du langage, par contre les colonnes sont indicées
par les symboles terminaux et le symbole # (l’indicateur de la fin de la chaine ).
Les cases de la table contiennent éventuellement des règles de la grammaire.
Deux notions sont nécessaires pour la construction de cette table: SUIVANT et
DEBUT.
 Intuitivement le DEBUT d’une chaine de symboles de la grammaire contient tous les
terminaux et éventuellement  si la chaine est vide qui peuvent apparaitre en tête d’une
chaine de terminaux dérivée à partir de la chaine initiale.
 Le SUIVANT d’un Non terminal est un ensemble comportant tous les terminaux ( #
inclus) qui peuvent suivre ce Non terminal dans toute chaine de symboles .
33
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Calcul de DEBUT(X)
Pour toute chaine composée de symboles terminaux et non_terminaux, on
cherche PREMIER(α) (ou First (α)) l’ensemble de tous les terminaux qui
peuvent commencer une chaine qui se dérive de α .

1-si X est un terminal alors DEBUT(X)=X

34
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :

Calcul de SUIVANT(X):
Pour tout non_terminal A, on cherche SUIVANT(A), l’ ensemble de tous les
symboles terminaux a qui peuvent apparaitre immédiatement à droite de A
dans une dérivation.

35
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :

36
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Construction de la table d'analyse

37
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Exercice: (analyse prédictive)
Soit la grammaire suivante avec :
VT ={+, -,*,/, (,), Id}
VN = E, E‘, T, T‘ ,F
Axiome : E
P : <E >::= <T><E’>
<E’>::= +<T><E’>|
<T>::= <F><T’>
<T’>::= *<F><T’>
<T’>::= /<F><T’>| 
<F>::= (<E>)| Id
38
1. Analysez le mot : m= 3 *4 +5
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice:
1. Analysez le mot : m= 3 *4 +5
a) Cherchons d’abord les informations DEBUT() et SUIVANT()

PREMIER(E)=PREMIER(T)= PREMIER(F)={(,Id}
PREMIER(E') = {+, }
PREMIER(T') = {*, }
SUIVANT(E) = SUIVANT(E') = { ), #}
SUIVANT(T) = SUIVANT(T') = {+,),#}
SUIVANT(F) = {+, *, ), #}
39
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
b) On peut maintenant déduire le tableau correspondant:

40
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
c) Maintenant, on utilise une pile pour déduire si le mot : m= 3 *4 +5 est
syntaxiquement correct. Voici l’algorithme utilisé:

41
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
d) Commençons donc l’analyse du mot : m= 3 *4 +5 en construisant
l’arbre syntaxique abstraite:

42
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Remarque:
Une grammaire G est dite LL(1) « Left-to-right scanning, Leftmost
derivation, use 1 symbol lookahead » si ses règles de production vérifient les
conditions suivantes :

Si la table prédictive est multi définie, c-à-d que si une case


occupée par plus d’une règle, on dit que la grammaire n’est pas LL(1)
43
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.2. Analyse Ascendante
Idée : On choisit la règle à appliquer après avoir lu le texte correspondant
L’arbre d’analyse est construit de bas (feuilles) en haut (racine)
La dérivation correspondante est droite : le non-terminal le plus à droite est actif.
Le programme remonte dans la dérivation.
Problème : comment garder trace des possibilités ?
Exemples des analyseurs ascendants:
Analyseurs LR(k) (from Left to rigth, Rigth derivation)
Analyseurs par décalage et réduction (shift/reduce analysis)
44
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.2. Analyse Ascendante
5.2.1. Analyseur LR(K)
C’est une technique efficace d’analyse syntaxique ascendante qui peut être
utilisée pour analyser une large classe de grammaire non contextuelle :

•L : signifie « parcours de l’entrée de la gauche vers la


droite » (left to right scanning of the input »,
• R : signifie « en construisant une dérivation droite
inverse » (constructing a Right most derivation in reverse)
• K indique le nombre de symboles de prévision utilisés
pour prendre les décisions d’analyse.
45
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.2. Analyse Ascendante
5.2.1. Analyseur LR(K)
Parmi les propriétés qui rendent l’analyse LR intéressante, on peut citer :
-Les analyseurs LR peuvent reconnaitre toutes les constructions des langages de
programmation décrites par une grammaire non contextuelle.
- Un analyseur LR peut détecter une erreur de syntaxe aussitôt que possible au cours
d’un parcours de gauche à droite de l’entrée.
Le principal inconvénient de cette méthode est qu’elle exige de fournir
une quantité trop importante de travail pour construire à la main un
analyseur LR. Pour la grammaire d’un langage de programmation typique, on
a besoin d’un outil spécialisé (YACC).
46
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.3. Programmer un Analyseur Syntaxique
Programmer directement l’analyse syntaxique de la chaîne de caractères
jusqu’à l’arbre de syntaxe abstraite serait très fastidueux et sans doute peu
efficace.
On utilise des générateurs d’analyseurs qui permette de ne spécifier que
les parties “utiles”
les entités lexicales
les règles de grammaire
les arbres de syntaxe abstraite
Les analyseurs obéissent à des règles syntaxiques spécifiques.
Ils sont eux-mêmes compilés pour engendrer les fonctions d’analyse.
Ils utilisent des méthodes puissantes à base d’automates.
47
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.3. Programmer un Analyseur Syntaxique
Implémentation des productions: pour chaque non-terminal A, construire une
procédure qui choisit une production de la forme A → α et l’applique
Initialisation: placer la tête de lecture sous le premier token et exécuter la procédure
associée au symbole de départ.
En fonction du lookahead (le token sous la tête de lecture à un moment donné), choisir
une production et l’appliquer dans le « bon » sens.
Le PDA peut effectuer 4 types d’actions :
Produce : la variable A au sommet de la pile est remplacée par la partie droite d’une
de ses règles (numérotée i) et le numéro i est écrit sur output.
Match : le terminal a au sommet de la pile correspond au terminal en input ; on
pop ce terminal et on passe au symbole d’input suivant.
Accept : Correspond à un Match du terminal $ : le terminal au sommet de la pile est
$ et correspond au terminal en input ; on termine l’analyse avec succès.
48 Erreur : Si aucun Match ni Produce n’est possible.
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.4. Propriétés de l’arbre de Syntaxe Abstaîte
un arbre de syntaxe abstraite ne conserve que les informations utiles pour
le calcul.
Les parenthèses sont utiles pour résoudre les ambiguîtés d’une écriture
linéaire mais inutiles dans les arbres de syntaxe abstraites.
Les commentaires sont inutiles pour engendrer le code.
La localisation des constructions de programmes dans le fichier permet de
mieux rendre compte des erreurs sémantiques.
49
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.4. Erreurs Syntaxique
En analyse syntaxique des langages de programmation, il faut être capable de continuer
l'analyse même lorsque le code source contient des erreurs, En fait, le gestionnaire
d’erreur doit :
indiquer la présence de l’erreur de façon claire et précise.
traiter l’erreur rapidement pour continuer l’analyse.
traiter l’erreur le plus efficacement possible de manière à ne pas en créer
de nouvelles.
On peut citer quatre approches qui vont dans ce sens, à savoir
le mode panique
les productions erreurs
la correction locale
50 la correction globale
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.4. Erreurs Syntaxique
Beaucoup d’erreurs sont par nature syntaxique, on peut citer par exemple:
; ou , oublié
une parenthèse ouvrante ou fermante manquante
une variable ou un champ manquant
Une fonction ou une méthode introuvable
Nombre de paramètres d’une fonction non valide
.
.
.

51
FSM AU:2019/2020 LFSI2 F. SBIAA

Vous aimerez peut-être aussi