SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Université Mohammed V - Agdal
Faculté des sciences
Département d'Informatique
Cours de Compilation
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14
Cours de Compilation
SMI - S5
Prof. M.D. RAHMANI
mrahmani@fsr.ac.ma
1
L'analyse ascendante (LR, RR)
Plan:
1- Le but d'un analyseur ascendant
1- Le but d'un analyseur ascendant
2- Exemple de la méthode LR
3- Implantation d'une grammaire LR
4- Le langage YACC (LALR)
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 2
L'analyse ascendante (LR, RR)
1- But:
L'analyse ascendante consiste à réduire la chaîne d'entrée
en un symbole initial, qui est l'axiome.
Il s'agit de la construction de l'arbre syntaxique en partant
Il s'agit de la construction de l'arbre syntaxique en partant
des éléments de la phrase à analyser (les terminaux) qui sont
les feuilles de l'arbre, vers la racine qui correspond à l'axiome
de la grammaire.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 3
L'analyse ascendante (LR, RR)
Remarques:
- Ce processus de construction de l'arbre est une réduction, qui se
traduit par le remplacement de la partie droite des productions par la
partie gauche.
- Les grammaires LR (ascendantes) sont plus générales que les
- Les grammaires LR (ascendantes) sont plus générales que les
grammaires LL (descendantes).
En fait pour les algorithmes ascendants, la décision d'effectuer une
réduction donnée est prise lorsque l'on dispose de l'ensemble de son
membre droit pour le remplacer par le non terminal à gauche,
- Par contre, dans le cas d'un algorithme descendant, la décision est
prise lorsque l'on dispose de 1 (k) symbole de son membre gauche.
- Dans le 1er cas, on dispose en général de plus d'informations que
dans le second.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 4
L'analyse ascendante LR
2- Exemple de la méthode LR:
Soit la grammaire:
S a A c B e
A A b | b
B d
Et soit la chaîne à analyser : ω = "abbcde"
Et soit la chaîne à analyser : ω = "abbcde"
chaîne d'entrée production utilisée Arbre d'analyse
abbcde A b S
aAbcde A Ab a A c B
aAcde B d A
aAcdBe S aAcBe b b d e
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 5
L'analyse ascendante LR
3- Implantation de la méthode LR:
Il s'agit d'une méthode d'analyse générale appelée "analyse
par décalage-réduction" (Shift Reduce Parsing)
Pile Tampon
état initial: $ ω$
état initial: $ ω$
état final: $S $
avec ω la chaîne à analyser et S l'axiome de la grammaire.
A l'état final, la chaîne ω est réduite en l'axiome à moins
qu'une erreur est détectée pendant l'analyse.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 6
L'analyse ascendante LR
Les opérations à effectuer sont:
1- Décalage: le symbole d'entrée courant est inséré dans la pile,
2- Réduction: l'analyseur reconnait la partie de droite d'une
production au sommet de la pile, elle la remplace alors par le non-
production au sommet de la pile, elle la remplace alors par le non-
terminal correspondant,
3- Acceptation: la chaîne est réduite en l'axiome,
4- Erreur: détection d'une erreur de syntaxe et appel d'une
routine de traitement d'erreur.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 7
L'analyse ascendante LR
Exemple de fonctionnement:
Pile Tampon Action
$ abbcde$ décalage
$a bbcde$ décalage
$ab bcde$ réduction A b (1)
$aA bcde$ décalage
$aAb cde$ réduction A Ab (1) (2)
$aA cde$ décalage
$aAc de$ décalage
$aAcd e$ réduction B d (1)
$aAcB e$ décalage
$aAcBe $ réduction S aAcBe
$S $ ACCEPTATION
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 8
L'analyse ascendante LR
Nous avons dans cette méthode d'analyse ascendante 2 types de
conflits:
1- Un conflit entre un décalage et un réduction (1),
nous avons choisi dans cet exemple de favoriser la
réduction par rapport au décalage.
2- Un conflit entre deux réductions (2),
2- Un conflit entre deux réductions (2),
nous avons choisi, la réduction du membre droit avec le
plus grand nombre de symboles.
Les inconvénients:
La méthode n'est pas déterministe et exige un gros travail
d'analyse,
Peu de langages de programmation utilisent ces méthodes.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 9
L'analyse ascendante LR
3 méthodes dérivent de la méthode générale:
- SLR (Simple LR): facile à implanter et non ambigüe mais
adaptée à une classe limitée de grammaires,
- LR canonique: est la plus efficace car la plus générale mais
- LR canonique: est la plus efficace car la plus générale mais
la plus couteuse en temps et en mémoire,
- LALR (Look Ahead) est intermédiaire entre les 2 méthodes
précédentes et prédictive,
La dernière méthode a donné naissance à l'outil YACC
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 10
Le langage YACC
Conçu au début des années 70 par Johnson, le langage YACC
veut dire, Yet Another Compiler Compiler ( encore un autre
compilateur de compilateurs).
1- But:
Construire à partir d'une grammaire une fonction C nommée
Construire à partir d'une grammaire une fonction C nommée
yyparse(), qui est un analyseur syntaxique qui reconnait les
constructions du langage décrit par la grammaire.
Un programme écrit en langage Yacc prend en entrée un
fichier source constitué essentiellement des productions d'une
grammaire G et produit un programme C qui, une fois compilé,
est un analyseur syntaxique pour le langage L(G).
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 11
Le langage YACC
Utilisation du Langage Yacc
grammaire yacc y.tab.h
MonProg.y y.tab.c
y.tab.c
lex.yy.c gcc MonAnalyseur
autres modules
texte source MonAnalyseur résultat de l'analyse
à analyser
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 12
Le langage YACC
2- Structure d'un code en YACC:
Le générateur d'analyseurs syntaxiques YACC a une structure
analogue à celle du LEX.
Le code source Yacc, doit avoir un nom terminé par ".y". Il
est composé de 3 sections délimitées par deux lignes "%%".
est composé de 3 sections délimitées par deux lignes "%%".
déclarations
%%
règles de traduction
%%
routines annexes en langage C
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 13
Le langage YACC
2.1- La section des déclarations:
Elle est constituée de 2 parties:
1- Une partie entre %{ et %} des déclarations à la C, des variables,
unions, structures, .....
2- Une partie constituée de la déclaration de
- l'axiome, avec %start
- l'axiome, avec %start
- des terminaux, avec %token
- des opérateurs, en précisant leur associativité, avec
%left, %right, %nonassoc
Remarques:
- Le symbole % doit être à la 1ère colonne
- Tout symbole non déclaré dans cette partie par token est considéré
comme un non terminal
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 14
Le langage YACC
2.2- La section des règles de traduction:
Après %% nous avons dans cette partie une suite de règles
de traduction.
Chaque règle est constituée par une production de la
Chaque règle est constituée par une production de la
grammaire associé aux phrases du langage à analyser et
éventuellement une action sous forme d'une règle sémantique.
La règle sémantique peut prendre la forme d'un schéma de
traduction ou d'une définition dirigée par la syntaxe.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 15
Le langage YACC
2.3- La section des fonctions annexes en C:
Après %% nous avons dans cette partie une suite de fonctions écrite en
langage C et utilisables par la 2ème partie des règles de traduction.
Remarques : la 1ère et la 3ème parties sont facultatives.
Nous allons écrire un code complet en Lex et Yacc, d'une calculatrice
Nous allons écrire un code complet en Lex et Yacc, d'une calculatrice
scientifique, qui va lire une expression arithmétique, l'évaluer et afficher le
résultat.
Soit la grammaire:
R E fin
E E + T | E - T | T
T T * F | T / F | F
F (E) | nombre
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 16
Le langage YACC
Un programme en Yacc: calc.y
1ère partie
%{
#include<stdio.h>
%}
%}
%token nombre fin // nombre et fin dont des terminaux
%left plus moins // '+' et le '-' associatif à gauche
%left fois div
%start R // R est l'axiome
%%
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 17
Le langage YACC
Un programme en Yacc (suite):
2 ème partie sans les règles sémantiques
R : E fin
;
E : E plus T
| E moins T
| T
| T
;
T : T fois F
| T div F
| F
;
F : '(' E ')'
| nombre
;
%%
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 18
Le langage YACC
2 ème partie avec les règles sémantiques
R : E fin { printf("le résultat est: %d", $1);}
;
E : E plus T { $$ = $1 + $3;}
| E moins T { $$ = $1 - $3;}
| T { $$ = $1; // facultatif }
;
;
T : T fois F { $$ = $1 * $3;}
| T div F { if ($3==0) printf ("division par zéro
interdite) else $$ = $1 / $3;}
| F { $$ = $1;}
;
F : '(' E ')' { $$ = $2;}
| nombre { $$ = $1;}
;
%%
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 19
Le langage YACC
Un programme en Yacc (suite):
3 ème partie:
%%
void yyerror(char *message) {
printf("<< %s", message);
}
int main(void) {
int main(void) {
printf("début de l'analysen");
yyparse();
printf("fin de l'analysen");
}
L'analyseur syntaxique se présente comme une fonction int
yyparse(void)qui rend 0 si la chaîne est acceptée, non nulle dans le cas
contraire.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 20
Le langage YACC
Un programme en Lex: analex.l
%{
#include<stdlib.h>
%include<calc.tab.h>
%}
nombre [0-9]+
%%
%%
[ t]+ {/* ne rien faire */}
{nombre} {yylval = atoi(yytext); return(nombre);
"n" {return (fin);}
"+" {return (plus);}
"-" {return (moins);}
"/" {return (div);}
"*" {return (fois);}
%%
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 21
Le langage YACC
Les étapes de compilation:
1 étape: > bison -d calc.y
en sortie on a, calc.tab.c et calc.tab.h
2ème étape: > flex analex.l
en sortie on a: lex.yy.c
en sortie on a: lex.yy.c
3ème étape: > gcc -c lex.yy.c -o cal.l.o
gcc -c calc.tab.c -o calc.y.o
gcc -o calc calc.l.o calc.y.o -lfl -lm
lfl: Library Fast Lex (la librairie du Flex)
lm: la librairie de Bison
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 22
Le langage YACC
Remarque:
- L'analyseur lexical produit par lex transmet les attributs des
unités lexicales à l'analyseur syntaxique produit par yacc via une
variable yylval qui par défaut est de type int.
- Si nous voulons manipuler des réels, nous devons modifier
- Si nous voulons manipuler des réels, nous devons modifier
ce type dans le fichier calc.tab.h:
#define YYTYPE int
...
extern YYSTYPE yylval;
A remplacer int par double
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 23
Le langage YACC
3- Gestion des conflits par Yacc:
Le langage Yacc adopte une analyse ascendante par
décalage-réduction, il peut rencontrer lors de l'analyse par une
grammaire 2 types de conflits:
1- Conflit entre un décalage et une réduction (shift/reduce
conflict), ce type correspond à choisir entre 2 actions possibles.
conflict), ce type correspond à choisir entre 2 actions possibles.
Le Yacc favorise par défaut le décalage.
2- Conflit entre une réduction et une autre réduction (reduce/
reduce conflict), ce conflit se produit quand 2 membres droits
peuvent se réduire par le symbole gauche d'une production au
sommet de la pile.
Le Yacc choisit la 1ère production écrite dans le fichier Yacc.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 24

Contenu connexe

Similaire à c4.pdf

Cours 1 bases de matlab 2eme annees
Cours 1   bases de matlab 2eme anneesCours 1   bases de matlab 2eme annees
Cours 1 bases de matlab 2eme anneesTarik Taleb Bendiab
 
Chapitre 4 - Les entrées-sorties en C.pdf
Chapitre 4 - Les entrées-sorties en C.pdfChapitre 4 - Les entrées-sorties en C.pdf
Chapitre 4 - Les entrées-sorties en C.pdfShiniGami0o0
 
Jouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesJouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesEric De la Clergerie
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfadeljaouadi
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage javakrymo
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeInforMatica34
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage CFahad Golra
 

Similaire à c4.pdf (20)

Cours 1 bases de matlab 2eme annees
Cours 1   bases de matlab 2eme anneesCours 1   bases de matlab 2eme annees
Cours 1 bases de matlab 2eme annees
 
Chapitre 4 - Les entrées-sorties en C.pdf
Chapitre 4 - Les entrées-sorties en C.pdfChapitre 4 - Les entrées-sorties en C.pdf
Chapitre 4 - Les entrées-sorties en C.pdf
 
Algorithmique iv
Algorithmique ivAlgorithmique iv
Algorithmique iv
 
Jouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiquesJouer avec des analyseurs syntaxiques
Jouer avec des analyseurs syntaxiques
 
Asd
AsdAsd
Asd
 
Ktab asd
Ktab asdKtab asd
Ktab asd
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdf
 
c2.pdf
c2.pdfc2.pdf
c2.pdf
 
Maths II
Maths IIMaths II
Maths II
 
Cours algorithmique02
Cours algorithmique02Cours algorithmique02
Cours algorithmique02
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
 
Algorithme chap 1
Algorithme chap 1Algorithme chap 1
Algorithme chap 1
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
Turbo1
Turbo1Turbo1
Turbo1
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Langage C
Langage CLangage C
Langage C
 

Plus de informatiquehageryah

Plus de informatiquehageryah (10)

Cours-Intelligence-artificielle-55.pdf
Cours-Intelligence-artificielle-55.pdfCours-Intelligence-artificielle-55.pdf
Cours-Intelligence-artificielle-55.pdf
 
cours1-2-vision-bklog.pdf
cours1-2-vision-bklog.pdfcours1-2-vision-bklog.pdf
cours1-2-vision-bklog.pdf
 
chapitre 1 SI.pdf
chapitre 1 SI.pdfchapitre 1 SI.pdf
chapitre 1 SI.pdf
 
Processus_Unifie_et_Approche_Agile chapitre 1.pptx
Processus_Unifie_et_Approche_Agile chapitre 1.pptxProcessus_Unifie_et_Approche_Agile chapitre 1.pptx
Processus_Unifie_et_Approche_Agile chapitre 1.pptx
 
Fortinet [Enregistrement automatique].pptx
Fortinet [Enregistrement automatique].pptxFortinet [Enregistrement automatique].pptx
Fortinet [Enregistrement automatique].pptx
 
fortinet et sécurité.pdf
fortinet et sécurité.pdffortinet et sécurité.pdf
fortinet et sécurité.pdf
 
01-introduction.ppt
01-introduction.ppt01-introduction.ppt
01-introduction.ppt
 
Plan_GE_22_06.docx
Plan_GE_22_06.docxPlan_GE_22_06.docx
Plan_GE_22_06.docx
 
Algebre-de-Boole-et-Simplifications.pdf
Algebre-de-Boole-et-Simplifications.pdfAlgebre-de-Boole-et-Simplifications.pdf
Algebre-de-Boole-et-Simplifications.pdf
 
architecture des calculateurs (2).pdf
architecture des calculateurs (2).pdfarchitecture des calculateurs (2).pdf
architecture des calculateurs (2).pdf
 

Dernier

Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoireEzechiasSteel
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfMedAbdelhayeSidiAhme
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptximaneeaouattahee
 

Dernier (6)

JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 

c4.pdf

  • 1. Université Mohammed V - Agdal Faculté des sciences Département d'Informatique Cours de Compilation Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 Cours de Compilation SMI - S5 Prof. M.D. RAHMANI mrahmani@fsr.ac.ma 1
  • 2. L'analyse ascendante (LR, RR) Plan: 1- Le but d'un analyseur ascendant 1- Le but d'un analyseur ascendant 2- Exemple de la méthode LR 3- Implantation d'une grammaire LR 4- Le langage YACC (LALR) Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 2
  • 3. L'analyse ascendante (LR, RR) 1- But: L'analyse ascendante consiste à réduire la chaîne d'entrée en un symbole initial, qui est l'axiome. Il s'agit de la construction de l'arbre syntaxique en partant Il s'agit de la construction de l'arbre syntaxique en partant des éléments de la phrase à analyser (les terminaux) qui sont les feuilles de l'arbre, vers la racine qui correspond à l'axiome de la grammaire. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 3
  • 4. L'analyse ascendante (LR, RR) Remarques: - Ce processus de construction de l'arbre est une réduction, qui se traduit par le remplacement de la partie droite des productions par la partie gauche. - Les grammaires LR (ascendantes) sont plus générales que les - Les grammaires LR (ascendantes) sont plus générales que les grammaires LL (descendantes). En fait pour les algorithmes ascendants, la décision d'effectuer une réduction donnée est prise lorsque l'on dispose de l'ensemble de son membre droit pour le remplacer par le non terminal à gauche, - Par contre, dans le cas d'un algorithme descendant, la décision est prise lorsque l'on dispose de 1 (k) symbole de son membre gauche. - Dans le 1er cas, on dispose en général de plus d'informations que dans le second. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 4
  • 5. L'analyse ascendante LR 2- Exemple de la méthode LR: Soit la grammaire: S a A c B e A A b | b B d Et soit la chaîne à analyser : ω = "abbcde" Et soit la chaîne à analyser : ω = "abbcde" chaîne d'entrée production utilisée Arbre d'analyse abbcde A b S aAbcde A Ab a A c B aAcde B d A aAcdBe S aAcBe b b d e Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 5
  • 6. L'analyse ascendante LR 3- Implantation de la méthode LR: Il s'agit d'une méthode d'analyse générale appelée "analyse par décalage-réduction" (Shift Reduce Parsing) Pile Tampon état initial: $ ω$ état initial: $ ω$ état final: $S $ avec ω la chaîne à analyser et S l'axiome de la grammaire. A l'état final, la chaîne ω est réduite en l'axiome à moins qu'une erreur est détectée pendant l'analyse. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 6
  • 7. L'analyse ascendante LR Les opérations à effectuer sont: 1- Décalage: le symbole d'entrée courant est inséré dans la pile, 2- Réduction: l'analyseur reconnait la partie de droite d'une production au sommet de la pile, elle la remplace alors par le non- production au sommet de la pile, elle la remplace alors par le non- terminal correspondant, 3- Acceptation: la chaîne est réduite en l'axiome, 4- Erreur: détection d'une erreur de syntaxe et appel d'une routine de traitement d'erreur. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 7
  • 8. L'analyse ascendante LR Exemple de fonctionnement: Pile Tampon Action $ abbcde$ décalage $a bbcde$ décalage $ab bcde$ réduction A b (1) $aA bcde$ décalage $aAb cde$ réduction A Ab (1) (2) $aA cde$ décalage $aAc de$ décalage $aAcd e$ réduction B d (1) $aAcB e$ décalage $aAcBe $ réduction S aAcBe $S $ ACCEPTATION Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 8
  • 9. L'analyse ascendante LR Nous avons dans cette méthode d'analyse ascendante 2 types de conflits: 1- Un conflit entre un décalage et un réduction (1), nous avons choisi dans cet exemple de favoriser la réduction par rapport au décalage. 2- Un conflit entre deux réductions (2), 2- Un conflit entre deux réductions (2), nous avons choisi, la réduction du membre droit avec le plus grand nombre de symboles. Les inconvénients: La méthode n'est pas déterministe et exige un gros travail d'analyse, Peu de langages de programmation utilisent ces méthodes. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 9
  • 10. L'analyse ascendante LR 3 méthodes dérivent de la méthode générale: - SLR (Simple LR): facile à implanter et non ambigüe mais adaptée à une classe limitée de grammaires, - LR canonique: est la plus efficace car la plus générale mais - LR canonique: est la plus efficace car la plus générale mais la plus couteuse en temps et en mémoire, - LALR (Look Ahead) est intermédiaire entre les 2 méthodes précédentes et prédictive, La dernière méthode a donné naissance à l'outil YACC Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 10
  • 11. Le langage YACC Conçu au début des années 70 par Johnson, le langage YACC veut dire, Yet Another Compiler Compiler ( encore un autre compilateur de compilateurs). 1- But: Construire à partir d'une grammaire une fonction C nommée Construire à partir d'une grammaire une fonction C nommée yyparse(), qui est un analyseur syntaxique qui reconnait les constructions du langage décrit par la grammaire. Un programme écrit en langage Yacc prend en entrée un fichier source constitué essentiellement des productions d'une grammaire G et produit un programme C qui, une fois compilé, est un analyseur syntaxique pour le langage L(G). Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 11
  • 12. Le langage YACC Utilisation du Langage Yacc grammaire yacc y.tab.h MonProg.y y.tab.c y.tab.c lex.yy.c gcc MonAnalyseur autres modules texte source MonAnalyseur résultat de l'analyse à analyser Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 12
  • 13. Le langage YACC 2- Structure d'un code en YACC: Le générateur d'analyseurs syntaxiques YACC a une structure analogue à celle du LEX. Le code source Yacc, doit avoir un nom terminé par ".y". Il est composé de 3 sections délimitées par deux lignes "%%". est composé de 3 sections délimitées par deux lignes "%%". déclarations %% règles de traduction %% routines annexes en langage C Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 13
  • 14. Le langage YACC 2.1- La section des déclarations: Elle est constituée de 2 parties: 1- Une partie entre %{ et %} des déclarations à la C, des variables, unions, structures, ..... 2- Une partie constituée de la déclaration de - l'axiome, avec %start - l'axiome, avec %start - des terminaux, avec %token - des opérateurs, en précisant leur associativité, avec %left, %right, %nonassoc Remarques: - Le symbole % doit être à la 1ère colonne - Tout symbole non déclaré dans cette partie par token est considéré comme un non terminal Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 14
  • 15. Le langage YACC 2.2- La section des règles de traduction: Après %% nous avons dans cette partie une suite de règles de traduction. Chaque règle est constituée par une production de la Chaque règle est constituée par une production de la grammaire associé aux phrases du langage à analyser et éventuellement une action sous forme d'une règle sémantique. La règle sémantique peut prendre la forme d'un schéma de traduction ou d'une définition dirigée par la syntaxe. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 15
  • 16. Le langage YACC 2.3- La section des fonctions annexes en C: Après %% nous avons dans cette partie une suite de fonctions écrite en langage C et utilisables par la 2ème partie des règles de traduction. Remarques : la 1ère et la 3ème parties sont facultatives. Nous allons écrire un code complet en Lex et Yacc, d'une calculatrice Nous allons écrire un code complet en Lex et Yacc, d'une calculatrice scientifique, qui va lire une expression arithmétique, l'évaluer et afficher le résultat. Soit la grammaire: R E fin E E + T | E - T | T T T * F | T / F | F F (E) | nombre Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 16
  • 17. Le langage YACC Un programme en Yacc: calc.y 1ère partie %{ #include<stdio.h> %} %} %token nombre fin // nombre et fin dont des terminaux %left plus moins // '+' et le '-' associatif à gauche %left fois div %start R // R est l'axiome %% Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 17
  • 18. Le langage YACC Un programme en Yacc (suite): 2 ème partie sans les règles sémantiques R : E fin ; E : E plus T | E moins T | T | T ; T : T fois F | T div F | F ; F : '(' E ')' | nombre ; %% Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 18
  • 19. Le langage YACC 2 ème partie avec les règles sémantiques R : E fin { printf("le résultat est: %d", $1);} ; E : E plus T { $$ = $1 + $3;} | E moins T { $$ = $1 - $3;} | T { $$ = $1; // facultatif } ; ; T : T fois F { $$ = $1 * $3;} | T div F { if ($3==0) printf ("division par zéro interdite) else $$ = $1 / $3;} | F { $$ = $1;} ; F : '(' E ')' { $$ = $2;} | nombre { $$ = $1;} ; %% Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 19
  • 20. Le langage YACC Un programme en Yacc (suite): 3 ème partie: %% void yyerror(char *message) { printf("<< %s", message); } int main(void) { int main(void) { printf("début de l'analysen"); yyparse(); printf("fin de l'analysen"); } L'analyseur syntaxique se présente comme une fonction int yyparse(void)qui rend 0 si la chaîne est acceptée, non nulle dans le cas contraire. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 20
  • 21. Le langage YACC Un programme en Lex: analex.l %{ #include<stdlib.h> %include<calc.tab.h> %} nombre [0-9]+ %% %% [ t]+ {/* ne rien faire */} {nombre} {yylval = atoi(yytext); return(nombre); "n" {return (fin);} "+" {return (plus);} "-" {return (moins);} "/" {return (div);} "*" {return (fois);} %% Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 21
  • 22. Le langage YACC Les étapes de compilation: 1 étape: > bison -d calc.y en sortie on a, calc.tab.c et calc.tab.h 2ème étape: > flex analex.l en sortie on a: lex.yy.c en sortie on a: lex.yy.c 3ème étape: > gcc -c lex.yy.c -o cal.l.o gcc -c calc.tab.c -o calc.y.o gcc -o calc calc.l.o calc.y.o -lfl -lm lfl: Library Fast Lex (la librairie du Flex) lm: la librairie de Bison Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 22
  • 23. Le langage YACC Remarque: - L'analyseur lexical produit par lex transmet les attributs des unités lexicales à l'analyseur syntaxique produit par yacc via une variable yylval qui par défaut est de type int. - Si nous voulons manipuler des réels, nous devons modifier - Si nous voulons manipuler des réels, nous devons modifier ce type dans le fichier calc.tab.h: #define YYTYPE int ... extern YYSTYPE yylval; A remplacer int par double Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 23
  • 24. Le langage YACC 3- Gestion des conflits par Yacc: Le langage Yacc adopte une analyse ascendante par décalage-réduction, il peut rencontrer lors de l'analyse par une grammaire 2 types de conflits: 1- Conflit entre un décalage et une réduction (shift/reduce conflict), ce type correspond à choisir entre 2 actions possibles. conflict), ce type correspond à choisir entre 2 actions possibles. Le Yacc favorise par défaut le décalage. 2- Conflit entre une réduction et une autre réduction (reduce/ reduce conflict), ce conflit se produit quand 2 membres droits peuvent se réduire par le symbole gauche d'une production au sommet de la pile. Le Yacc choisit la 1ère production écrite dans le fichier Yacc. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 24