9 octobre 2007 Cours de compilation 5 - Intranet 1
Cours de compilationCours de compilation
Techniques d’analyseTechniques d’analyseascendantesascendantes
9 octobre 2007 Cours de compilation 5 - Intranet 2
Les grandes lignes du coursLes grandes lignes du cours
•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
9 octobre 2007 Cours de compilation 5 - Intranet 3
U N EU N E
G R A M M A I R EG R A M M A I R E
N O N N O N
L L ( K )L L ( K )
9 octobre 2007 Cours de compilation 5 - Intranet 4
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• En TD, nous avons démontré que la grammaire des En TD, nous avons démontré que la grammaire des
expressions arithmétiques ci-dessous à gauche est LL expressions arithmétiques ci-dessous à gauche est LL ( 1 ) :( 1 ) :
A ::= T E’ A ::= T E’
E’ ::= + T E’ | E’ ::= + T E’ |
T ::= F T’ T ::= F T’
T’ ::= * F T’ | T’ ::= * F T’ |
F ::= id | ( A ) F ::= id | ( A )
9 octobre 2007 Cours de compilation 5 - Intranet 5
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• En TD, nous avons démontré que la grammaire des En TD, nous avons démontré que la grammaire des
expressions arithmétiques ci-dessous à gauche est LL expressions arithmétiques ci-dessous à gauche est LL ( 1 ) :( 1 ) :
• Il en est de même pour la grammaire ci-dessous à droite Il en est de même pour la grammaire ci-dessous à droite qui est celles des expressions logiques :qui est celles des expressions logiques :
A ::= T E’ A ::= T E’ L ::= D H’L ::= D H’E’ ::= + T E’ | E’ ::= + T E’ | H’ ::= v D H’ | H’ ::= v D H’ | T ::= F T’ T ::= F T’ D ::= C I’D ::= C I’T’ ::= * F T’ | T’ ::= * F T’ | I’ ::= C I’ | I’ ::= C I’ | F ::= id | ( A ) F ::= id | ( A ) C ::= id | ( E ) C ::= id | ( E )
vv
9 octobre 2007 Cours de compilation 5 - Intranet 6
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• En TD, nous avons démontré que la grammaire des En TD, nous avons démontré que la grammaire des
expressions arithmétiques ci-dessous à gauche est LL expressions arithmétiques ci-dessous à gauche est LL ( 1 ) :( 1 ) :
• Il en est de même pour la grammaire ci-dessous à droite Il en est de même pour la grammaire ci-dessous à droite qui est celles des expressions logiques :qui est celles des expressions logiques :
• En combinant les expressions arithmétiques et logiques, En combinant les expressions arithmétiques et logiques, nous ne sommes plus LL ( k ) pour aucun k :nous ne sommes plus LL ( k ) pour aucun k :
A ::= T E’ A ::= T E’ L ::= D H’L ::= D H’
E’ ::= + T E’ | E’ ::= + T E’ | H’ ::= v D H’ | H’ ::= v D H’ | T ::= F T’ T ::= F T’ D ::= C I’D ::= C I’
T’ ::= * F T’ | T’ ::= * F T’ | I’ ::= C I’ | I’ ::= C I’ | F ::= id | ( A ) F ::= id | ( A ) C ::= id | ( E ) C ::= id | ( E )
vv
| A = A| A = A
9 octobre 2007 Cours de compilation 5 - Intranet 7
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• En TD, nous avons démontré que la grammaire des En TD, nous avons démontré que la grammaire des
expressions arithmétiques ci-dessous à gauche est LL expressions arithmétiques ci-dessous à gauche est LL ( 1 ) :( 1 ) :
• Il en est de même pour la grammaire ci-dessous à droite Il en est de même pour la grammaire ci-dessous à droite qui est celles des expressions logiques :qui est celles des expressions logiques :
• En combinant les expressions arithmétiques et logiques, En combinant les expressions arithmétiques et logiques, nous ne sommes plus LL ( k ) pour aucun k :nous ne sommes plus LL ( k ) pour aucun k :
A ::= T E’ A ::= T E’ L ::= D H’L ::= D H’
E’ ::= + T E’ | E’ ::= + T E’ | H’ ::= v D H’ | H’ ::= v D H’ | T ::= F T’ T ::= F T’ D ::= C I’D ::= C I’
T’ ::= * F T’ | T’ ::= * F T’ | I’ ::= C I’ | I’ ::= C I’ | F ::= id | ( A ) F ::= id | ( A ) C ::= id | ( E ) C ::= id | ( E )
vv
| A = A| A = A
9 octobre 2007 Cours de compilation 5 - Intranet 8
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
9 octobre 2007 Cours de compilation 5 - Intranet 9
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
9 octobre 2007 Cours de compilation 5 - Intranet 10
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
• Il y a des parenthèses arithmétiques et des Il y a des parenthèses arithmétiques et des parenthèses logiques :parenthèses logiques :
(( (( A A ++ B B )) = C = C vv . . . . . . ))
9 octobre 2007 Cours de compilation 5 - Intranet 11
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
• Il y a des parenthèses arithmétiques et des Il y a des parenthèses arithmétiques et des parenthèses logiques :parenthèses logiques :
(( (( A A ++ B B )) = C = C vv . . . . . . ))
9 octobre 2007 Cours de compilation 5 - Intranet 12
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
• Il y a des parenthèses arithmétiques et des Il y a des parenthèses arithmétiques et des parenthèses logiques :parenthèses logiques :
(( (( A A ++ B B )) = C = C vv . . . . . . ))
9 octobre 2007 Cours de compilation 5 - Intranet 13
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
• Il y a des parenthèses arithmétiques et des Il y a des parenthèses arithmétiques et des parenthèses logiques :parenthèses logiques :
(( (( A A ++ B B )) = C = C vv . . . . . . ))
• Il peut y avoir plus que k parenthèses ouvrantes, Il peut y avoir plus que k parenthèses ouvrantes, quelle que soit la valeur de k !quelle que soit la valeur de k !
9 octobre 2007 Cours de compilation 5 - Intranet 14
Une grammaire non LL ( k )Une grammaire non LL ( k )----------------------------------------------------------------------------------------------------------------------------
----• Il y a problème pour la règleIl y a problème pour la règle
C ::= id | ( E ) | A = AC ::= id | ( E ) | A = A
car car (( Prem (Prem ( ( E )( E ) ) v Prem () v Prem ( A = AA = A ))
• Il y a des parenthèses arithmétiques et des Il y a des parenthèses arithmétiques et des parenthèses logiques :parenthèses logiques :
(( (( A A ++ B B )) = C = C vv . . . . . . ))
• Il peut y avoir plus que k parenthèses ouvrantes, Il peut y avoir plus que k parenthèses ouvrantes, quelle que soit la valeur de k !quelle que soit la valeur de k !
9 octobre 2007 Cours de compilation 5 - Intranet 15
R E C U P E R A T I O NR E C U P E R A T I O N
S U RS U R
E R R E U R E R R E U R
9 octobre 2007 Cours de compilation 5 - Intranet 16
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
InstInst
M_gaucheM_gauche == ExprExpr
9 octobre 2007 Cours de compilation 5 - Intranet 17
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
InstInst
M_gaucheM_gauche == ExprExpr
9 octobre 2007 Cours de compilation 5 - Intranet 18
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
Ou reprendre ?Ou reprendre ?
Comment interpréter ?Comment interpréter ?
InstInst
M_gaucheM_gauche == ExprExpr
9 octobre 2007 Cours de compilation 5 - Intranet 19
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
Ou reprendre ?Ou reprendre ?
Comment interpréter ?Comment interpréter ?
. . . [ . . . ( 5 . . . [ . . . ( 5 ++-- . . . . . .
InstInst
M_gaucheM_gauche == ExprExpr
9 octobre 2007 Cours de compilation 5 - Intranet 20
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
Ou reprendre ?Ou reprendre ?
Comment interpréter ?Comment interpréter ?
. . . [ . . . . . . [ . . . (( 5 5 ++-- . . . . . . )) . . . . . .
InstInst
M_gaucheM_gauche == ExprExpr
Cherchez la parenthèse fermante ! Si elle existe ! ! !Cherchez la parenthèse fermante ! Si elle existe ! ! !
9 octobre 2007 Cours de compilation 5 - Intranet 21
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
Ou reprendre ?Ou reprendre ?
Comment interpréter ?Comment interpréter ?
. . . . . . [[ . . . . . . (( 5 5 ++-- . . . . . . . . . . . . ]] . . . . . .
InstInst
M_gaucheM_gauche == ExprExpr
Cherchez le crochet fermant ! S’il existe ! ! !Cherchez le crochet fermant ! S’il existe ! ! !
9 octobre 2007 Cours de compilation 5 - Intranet 22
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Soit :Soit :
Ou reprendre ?Ou reprendre ?
Comment interpréter ?Comment interpréter ?
. . . . . . [[ . . . . . . (( 5 5 ++-- . . . . . . . . . . . . . . . . . . ;;
InstInst
M_gaucheM_gauche == ExprExpr
Cherchez le point virgule ! S’il existe ! ! !Cherchez le point virgule ! S’il existe ! ! !
9 octobre 2007 Cours de compilation 5 - Intranet 23
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Le principe de la récupération sur erreur consisteLe principe de la récupération sur erreur consiste
– à considérer les différentes constructions à considérer les différentes constructions démarrées, mais non terminées ( par exemple : démarrées, mais non terminées ( par exemple : une expression dans un indexage d’une une expression dans un indexage d’une instruction, d’une fonction ) ,instruction, d’une fonction ) ,
9 octobre 2007 Cours de compilation 5 - Intranet 24
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Le principe de la récupération sur erreur consisteLe principe de la récupération sur erreur consiste
– à considérer les différentes constructions à considérer les différentes constructions démarrées, mais non terminées ( par exemple : démarrées, mais non terminées ( par exemple : une expression dans un indexage d’une une expression dans un indexage d’une instruction, d’une fonction ) ,instruction, d’une fonction ) ,
– à déterminer les « lexèmes suivants » de ces à déterminer les « lexèmes suivants » de ces différentes constructions etdifférentes constructions et
9 octobre 2007 Cours de compilation 5 - Intranet 25
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Le principe de la récupération sur erreur consisteLe principe de la récupération sur erreur consiste
– à considérer les différentes constructions à considérer les différentes constructions démarrées, mais non terminées ( par exemple : démarrées, mais non terminées ( par exemple : une expression dans un indexage d’une une expression dans un indexage d’une instruction, d’une fonction ) ,instruction, d’une fonction ) ,
– à déterminer les « lexèmes suivants » de ces à déterminer les « lexèmes suivants » de ces différentes constructions etdifférentes constructions et
– à reprendre l’analyse après le premier tel lexème à reprendre l’analyse après le premier tel lexème que nous rencontrons !que nous rencontrons !
9 octobre 2007 Cours de compilation 5 - Intranet 26
Récupération sur erreurRécupération sur erreur----------------------------------------------------------------------------------------------------------------------------
----• Le principe de la récupération sur erreur consisteLe principe de la récupération sur erreur consiste
– à considérer les différentes constructions à considérer les différentes constructions démarrées, mais non terminées ( par exemple : démarrées, mais non terminées ( par exemple : une expression dans un indexage d’une une expression dans un indexage d’une instruction, d’une fonction ) ,instruction, d’une fonction ) ,
– à déterminer les « lexèmes suivants » de ces à déterminer les « lexèmes suivants » de ces différentes constructions etdifférentes constructions et
– à reprendre l’analyse après le premier tel lexème à reprendre l’analyse après le premier tel lexème que nous rencontrons !que nous rencontrons !
• Dans la table d’analyse nous pouvons indiquer les Dans la table d’analyse nous pouvons indiquer les « suivants » souhaités en cas de problème !« suivants » souhaités en cas de problème !
9 octobre 2007 Cours de compilation 5 - Intranet 27
S T R U C T U R ES T R U C T U R E
D ‘ U ND ‘ U N
A N A L Y S E U RA N A L Y S E U R
A S C E N D A N T A S C E N D A N T
9 octobre 2007 Cours de compilation 5 - Intranet 28
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
9 octobre 2007 Cours de compilation 5 - Intranet 29
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
w =w = aa ii ##. . .. . . . . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 30
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
w =w = aa ii ##. . .. . . . . .. . .
ss00
xx11
ss11
xxmm
ssmm
. . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 31
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
w =w = aa ii ##. . .. . . . . .. . .
ss00
xx11
ss11
xxmm
ssmm
. . .. . .
x x N v V N v V
s s ETATS ETATSii
ii
9 octobre 2007 Cours de compilation 5 - Intranet 32
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
w =w = aa ii ##. . .. . . . . .. . .
ss00
xx11
ss11
xxmm
ssmm
. . .. . .
x x N v V N v V
s s ETATS ETATSii
ii
ACTIONS SUCCACTIONS SUCC
9 octobre 2007 Cours de compilation 5 - Intranet 33
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une vue d’ensemble :Une vue d’ensemble :
ProgrammeProgramme
LRLR
w =w = aa ii ##. . .. . . . . .. . .
ss00
xx11
ss11
xxmm
ssmm
. . .. . .
x x N v V N v V
s s ETATS ETATSii
ii
ACTIONS SUCCACTIONS SUCC
ACTIONS ( s , a )ACTIONS ( s , a )
SUCC ( s , A )SUCC ( s , A )
mm ii
jj
9 octobre 2007 Cours de compilation 5 - Intranet 34
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
La pile !La pile ! Le mot !Le mot !
9 octobre 2007 Cours de compilation 5 - Intranet 35
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Il y a quatre types d’actions :Il y a quatre types d’actions :
– Décaler ( SHIFT ) avec un état s !Décaler ( SHIFT ) avec un état s !
– Réduire ( REDUCE ) avec une règle B ::= Réduire ( REDUCE ) avec une règle B ::= ! !
– Accepter ( ACCEPT ) !Accepter ( ACCEPT ) !
– Erreur ( ERROR ) !Erreur ( ERROR ) !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 36
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Il y a quatre types d’actions :Il y a quatre types d’actions :
– Décaler ( SHIFT ) avec un état s !Décaler ( SHIFT ) avec un état s !
– Réduire ( REDUCE ) avec une règle B ::= Réduire ( REDUCE ) avec une règle B ::= ! !
– Accepter ( ACCEPT ) !Accepter ( ACCEPT ) !
– Erreur ( ERROR ) !Erreur ( ERROR ) !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )
Evidentes !Evidentes !
00 11 11 mm mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 37
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Il y a quatre types d’actions :Il y a quatre types d’actions :
– Décaler ( SHIFT ) avec un état s !Décaler ( SHIFT ) avec un état s !
– Réduire ( REDUCE ) avec une règle B ::= Réduire ( REDUCE ) avec une règle B ::= ! !
– Accepter ( ACCEPT ) !Accepter ( ACCEPT ) !
– Erreur ( ERROR ) !Erreur ( ERROR ) !
• Regardons en détail le SHIFT et le REDUCE !Regardons en détail le SHIFT et le REDUCE !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 38
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le SHIFT :Le SHIFT :
– Si ACTIONS ( s , a ) = SHIFT s :Si ACTIONS ( s , a ) = SHIFT s :
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 39
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le SHIFT :Le SHIFT :
– Si ACTIONS ( s , a ) = SHIFT s :Si ACTIONS ( s , a ) = SHIFT s :
– alors nous engrangeons le lexème a etalors nous engrangeons le lexème a et
– nous empilons aussi l’état s qui est nous empilons aussi l’état s qui est caractéristique de toute la séquence x . . . x a caractéristique de toute la séquence x . . . x a ! !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
mm ii
ii
ii11 mm
9 octobre 2007 Cours de compilation 5 - Intranet 40
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le SHIFT :Le SHIFT :
– Si ACTIONS ( s , a ) = SHIFT s :Si ACTIONS ( s , a ) = SHIFT s :
– alors nous engrangeons le lexème a etalors nous engrangeons le lexème a et
– nous empilons aussi l’état s qui est nous empilons aussi l’état s qui est caractéristique de toute la séquence x . . . x a caractéristique de toute la séquence x . . . x a ! !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )
( s x s . . . x s ( s x s . . . x s a sa s , a . . . # ) , a . . . # )
00 11 11 mm mm ii
mm ii
ii
ii11 mm
00 11 11 mm mm ii i+1i+1
9 octobre 2007 Cours de compilation 5 - Intranet 41
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le SHIFT :Le SHIFT :
– Si ACTIONS ( s , a ) = SHIFT s :Si ACTIONS ( s , a ) = SHIFT s :
– alors nous engrangeons le lexème a etalors nous engrangeons le lexème a et
– nous empilons aussi l’état s qui est nous empilons aussi l’état s qui est caractéristique de toute la séquence x . . . x a caractéristique de toute la séquence x . . . x a ! !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )
mm ii
ii
ii11 mm
( s x s . . . x s ( s x s . . . x s a sa s , a . . . # ) , a . . . # )00 11 11 mm mm ii i+1i+1
00 11 11 mm mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 42
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le REDUCE :Le REDUCE :
– Si ACTIONS ( s , a ) = REDUCE par A ::= Si ACTIONS ( s , a ) = REDUCE par A ::= . . . . . . : :
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
mm ii 11 rr
9 octobre 2007 Cours de compilation 5 - Intranet 43
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le REDUCE :Le REDUCE :
– Si ACTIONS ( s , a ) = REDUCE par A ::= Si ACTIONS ( s , a ) = REDUCE par A ::= . . . . . . : :
– alors nous avons x . . . x = alors nous avons x . . . x = . . . . . . ! !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )00 11 11 mm mm ii
mm ii 11 rr
mmm-r+1m-r+1 11 rr
9 octobre 2007 Cours de compilation 5 - Intranet 44
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le REDUCE :Le REDUCE :
– Si ACTIONS ( s , a ) = REDUCE par A ::= Si ACTIONS ( s , a ) = REDUCE par A ::= . . . . . . : :
– alors nous avons x . . . x = alors nous avons x . . . x = . . . . . . ! !
– Nous dépilons ces Nous dépilons ces et leurs états et leurs états correspondants etcorrespondants et
nous les remplaçons par le membre gauche A !nous les remplaçons par le membre gauche A !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )
( s x s . . . x s ( s x s . . . x s A A , a . . . # ) , a . . . # )
00 11 11 mm mm ii
mm ii
00 11 11 m-rm-r ii
11 rr
mmm-r+1m-r+1 11 rr
ii
m-rm-r
9 octobre 2007 Cours de compilation 5 - Intranet 45
L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------
----• Une autre vue de l’état de la machine :Une autre vue de l’état de la machine :
• Le REDUCE :Le REDUCE :
– Si ACTIONS ( s , a ) = REDUCE par A ::= Si ACTIONS ( s , a ) = REDUCE par A ::= . . . . . . : :
– alors nous avons x . . . x = alors nous avons x . . . x = . . . . . . ! !
– Nous dépilons ces Nous dépilons ces et leurs états correspondants et leurs états correspondants etet
nous les remplaçons par le membre gauche A !nous les remplaçons par le membre gauche A !
– Le nouvel état est s obtenu grâce à SUCC ( s , A Le nouvel état est s obtenu grâce à SUCC ( s , A ) !) !
( s x s . . . x s , a . . . # )( s x s . . . x s , a . . . # )
mm ii
( s x s . . . x s ( s x s . . . x s A sA s , a . . . # ) , a . . . # )00 11 11 m-rm-r ii
11 rr
mmm-r+1m-r+1 11 rr
ii
m-rm-r
m-rm-r
00 11 11 mm mm ii
9 octobre 2007 Cours de compilation 5 - Intranet 46
C O N F L I T SC O N F L I T S
D A N SD A N S
L ‘ A N A L Y S EL ‘ A N A L Y S E
A S C E N D A N T E A S C E N D A N T E
9 octobre 2007 Cours de compilation 5 - Intranet 47
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
9 octobre 2007 Cours de compilation 5 - Intranet 48
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé soit analysée jusqu’à un certain point ( matérialisé par un . ) :par un . ) :
A ::= A ::=
11 22 33 44 55
9 octobre 2007 Cours de compilation 5 - Intranet 49
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé soit analysée jusqu’à un certain point ( matérialisé par un . ) :par un . ) :
A ::= A ::=
• Le premier conflit est de type SHIFT – REDUCE .Le premier conflit est de type SHIFT – REDUCE .
11 22 33 44 55
9 octobre 2007 Cours de compilation 5 - Intranet 50
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par soit analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le premier conflit est de type SHIFT – REDUCE .Le premier conflit est de type SHIFT – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . . X X --- X --- X
11 22 33 44 55
11 kk 11 kk k+1k+1 nn
9 octobre 2007 Cours de compilation 5 - Intranet 51
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par soit analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le premier conflit est de type SHIFT – REDUCE .Le premier conflit est de type SHIFT – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . . X X --- X --- X
11 22 33 44 55
11 kk 11 kk k+1k+1 nn
9 octobre 2007 Cours de compilation 5 - Intranet 52
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par soit analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le premier conflit est de type SHIFT – REDUCE .Le premier conflit est de type SHIFT – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . . X X --- X --- X
11 22 33 44 55
11 kk 11 kk k+1k+1 nn
9 octobre 2007 Cours de compilation 5 - Intranet 53
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé soit analysée jusqu’à un certain point ( matérialisé par un . ) :par un . ) :
A ::= A ::=
• Le second conflit est de type REDUCE – REDUCE .Le second conflit est de type REDUCE – REDUCE .
11 22 33 44 55
9 octobre 2007 Cours de compilation 5 - Intranet 54
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle soit Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le second conflit est de type REDUCE – REDUCE .Le second conflit est de type REDUCE – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . .
11 22 33 44 55
11 kk 11 kk
9 octobre 2007 Cours de compilation 5 - Intranet 55
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle soit Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le second conflit est de type REDUCE – REDUCE .Le second conflit est de type REDUCE – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . .
11 22 33 44 55
11 kk 11 kk
9 octobre 2007 Cours de compilation 5 - Intranet 56
Les conflits de l’analyse ascendanteLes conflits de l’analyse ascendante----------------------------------------------------------------------------------------------------------------------------
----• Toutes les grammaires ne conviennent pas à une Toutes les grammaires ne conviennent pas à une
analyse ascendante, comme pour l’analyse analyse ascendante, comme pour l’analyse descendante.descendante.
• Un état correspond « en gros » au fait qu’une règle soit Un état correspond « en gros » au fait qu’une règle soit analysée jusqu’à un certain point ( matérialisé par analysée jusqu’à un certain point ( matérialisé par un . ) :un . ) :
A ::= A ::=
• Le second conflit est de type REDUCE – REDUCE .Le second conflit est de type REDUCE – REDUCE .
• L’état courant correspond aux deux règles suivantes :L’état courant correspond aux deux règles suivantes :
A ::= X --- X A ::= X --- X . et . et B ::= X --- X B ::= X --- X . . 11 kk 11 kk
11 22 33 44 55
9 octobre 2007 Cours de compilation 5 - Intranet 57
V A R I A N T E S V A R I A N T E S
D ‘ A N A L Y S E SD ‘ A N A L Y S E S
A S C E N D A N T E S A S C E N D A N T E S
9 octobre 2007 Cours de compilation 5 - Intranet 58
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise L’analyse classique est l’analyse LR ( 1 ) qui utilise
un caractère de look-ahead !un caractère de look-ahead !
9 octobre 2007 Cours de compilation 5 - Intranet 59
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise L’analyse classique est l’analyse LR ( 1 ) qui utilise
un caractère de look-ahead !un caractère de look-ahead !
• Nous pouvons définir des analyses LR ( k ) avec k > Nous pouvons définir des analyses LR ( k ) avec k > 1 !1 !
9 octobre 2007 Cours de compilation 5 - Intranet 60
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise L’analyse classique est l’analyse LR ( 1 ) qui utilise
un caractère de look-ahead !un caractère de look-ahead !
• Nous pouvons définir des analyses LR ( k ) avec k > Nous pouvons définir des analyses LR ( k ) avec k > 1 !1 !
• Théorème : Pour toute grammaire G qui est Théorème : Pour toute grammaire G qui est analysable par LR ( k ) avec k > 1 , il existe une analysable par LR ( k ) avec k > 1 , il existe une grammaire G’ qui est analysable par LR ( 1 ) et grammaire G’ qui est analysable par LR ( 1 ) et reconnaît le même langage ! reconnaît le même langage !
9 octobre 2007 Cours de compilation 5 - Intranet 61
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise L’analyse classique est l’analyse LR ( 1 ) qui utilise
un caractère de look-ahead !un caractère de look-ahead !
• Nous pouvons définir des analyses LR ( k ) avec k > Nous pouvons définir des analyses LR ( k ) avec k > 1 !1 !
• Théorème : Pour toute grammaire G qui est Théorème : Pour toute grammaire G qui est analysable par LR ( k ) avec k > 1 , il existe une analysable par LR ( k ) avec k > 1 , il existe une grammaire G’ qui est analysable par LR ( 1 ) et grammaire G’ qui est analysable par LR ( 1 ) et reconnaît le même langage ! reconnaît le même langage !
• L’analyse LALR utilise des tables plus compactes L’analyse LALR utilise des tables plus compactes que l’analyse LR en fusionnant des états qui que l’analyse LR en fusionnant des états qui entraînent le même traitement !entraînent le même traitement !
9 octobre 2007 Cours de compilation 5 - Intranet 62
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise L’analyse classique est l’analyse LR ( 1 ) qui utilise
un caractère de look-ahead !un caractère de look-ahead !
• Nous pouvons définir des analyses LR ( k ) avec k > Nous pouvons définir des analyses LR ( k ) avec k > 1 !1 !
• Théorème : Pour toute grammaire G qui est Théorème : Pour toute grammaire G qui est analysable par LR ( k ) avec k > 1 , il existe une analysable par LR ( k ) avec k > 1 , il existe une grammaire G’ qui est analysable par LR ( 1 ) et grammaire G’ qui est analysable par LR ( 1 ) et reconnaît le même langage ! reconnaît le même langage !
• L’analyse LALR utilise des tables plus compactes L’analyse LALR utilise des tables plus compactes que l’analyse LR en fusionnant des états qui que l’analyse LR en fusionnant des états qui entraînent le même traitement !entraînent le même traitement !
• « yacc » et « bison » sont LALR !« yacc » et « bison » sont LALR !
9 octobre 2007 Cours de compilation 5 - Intranet 63
Les différentes analyses ascendantesLes différentes analyses ascendantes----------------------------------------------------------------------------------------------------------------------------
----• L’analyse classique est l’analyse LR ( 1 ) qui utilise un L’analyse classique est l’analyse LR ( 1 ) qui utilise un
caractère de look-ahead !caractère de look-ahead !
• Nous pouvons définir des analyses LR ( k ) avec k > 1 !Nous pouvons définir des analyses LR ( k ) avec k > 1 !
• Théorème : Pour toute grammaire G qui est analysable Théorème : Pour toute grammaire G qui est analysable par LR ( k ) avec k > 1 , il existe une grammaire G’ qui par LR ( k ) avec k > 1 , il existe une grammaire G’ qui est analysable par LR ( 1 ) et reconnaît le même est analysable par LR ( 1 ) et reconnaît le même langage ! langage !
• L’analyse LALR utilise des tables plus compactes que L’analyse LALR utilise des tables plus compactes que l’analyse LR en fusionnant des états qui entraînent le l’analyse LR en fusionnant des états qui entraînent le même traitement !même traitement !
• « yacc » et « bison » sont LALR !« yacc » et « bison » sont LALR !
• L’analyse SLR est la plus simple, mais elle est souvent L’analyse SLR est la plus simple, mais elle est souvent inintéressante, car pas assez puissante !inintéressante, car pas assez puissante !
9 octobre 2007 Cours de compilation 5 - Intranet 64
L E SL E S
T A B L E S T A B L E S
D ‘ A N A L Y S ED ‘ A N A L Y S E
L R ( 1 ) L R ( 1 )
9 octobre 2007 Cours de compilation 5 - Intranet 65
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Nous partons d’une grammaire G’ dite augmentée Nous partons d’une grammaire G’ dite augmentée
par l’adjonction de la règle S’ ::= S qui fournit un par l’adjonction de la règle S’ ::= S qui fournit un nouvel axiome S’ .nouvel axiome S’ .
9 octobre 2007 Cours de compilation 5 - Intranet 66
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Nous partons d’une grammaire G’ dite augmentée Nous partons d’une grammaire G’ dite augmentée
par l’adjonction de la règle S’ ::= S qui fournit un par l’adjonction de la règle S’ ::= S qui fournit un nouvel axiome S’ .nouvel axiome S’ .
• Chaque état correspond à un ensemble d’entités.Chaque état correspond à un ensemble d’entités.
9 octobre 2007 Cours de compilation 5 - Intranet 67
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Nous partons d’une grammaire G’ dite augmentée Nous partons d’une grammaire G’ dite augmentée
par l’adjonction de la règle S’ ::= S qui fournit un par l’adjonction de la règle S’ ::= S qui fournit un nouvel axiome S’ .nouvel axiome S’ .
• Chaque état correspond à un ensemble d’entités.Chaque état correspond à un ensemble d’entités.
• Une entité est une règle partiellement analysée Une entité est une règle partiellement analysée accompagnée d’un terminal a :accompagnée d’un terminal a :
[ A ::= [ A ::= . B . B , a ] , a ]
9 octobre 2007 Cours de compilation 5 - Intranet 68
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Nous partons d’une grammaire G’ dite augmentée Nous partons d’une grammaire G’ dite augmentée
par l’adjonction de la règle S’ ::= S qui fournit un par l’adjonction de la règle S’ ::= S qui fournit un nouvel axiome S’ .nouvel axiome S’ .
• Chaque état correspond à un ensemble d’entités.Chaque état correspond à un ensemble d’entités.
• Une entité est une règle partiellement analysée Une entité est une règle partiellement analysée accompagnée d’un terminal a :accompagnée d’un terminal a :
[ A ::= [ A ::= . B . B , a ] , a ]
• La règle a été reconnue sur son préfixe La règle a été reconnue sur son préfixe alors que alors que la suite doit encore être reconnue.la suite doit encore être reconnue.
9 octobre 2007 Cours de compilation 5 - Intranet 69
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Nous partons d’une grammaire G’ dite augmentée Nous partons d’une grammaire G’ dite augmentée
par l’adjonction de la règle S’ ::= S qui fournit un par l’adjonction de la règle S’ ::= S qui fournit un nouvel axiome S’ .nouvel axiome S’ .
• Chaque état correspond à un ensemble d’entités.Chaque état correspond à un ensemble d’entités.
• Une entité est une règle partiellement analysée Une entité est une règle partiellement analysée accompagnée d’un terminal a :accompagnée d’un terminal a :
[ A ::= [ A ::= . B . B , a ] , a ]
• La règle a été reconnue sur son préfixe La règle a été reconnue sur son préfixe alors que alors que la suite doit encore être reconnue.la suite doit encore être reconnue.
• Le terminal a est un lexème qui pourra apparaître Le terminal a est un lexème qui pourra apparaître dans le flux au moment où dans le flux au moment où B B sera réduit en A ! sera réduit en A !
9 octobre 2007 Cours de compilation 5 - Intranet 70
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
9 octobre 2007 Cours de compilation 5 - Intranet 71
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
9 octobre 2007 Cours de compilation 5 - Intranet 72
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de , a ] de EEEE
9 octobre 2007 Cours de compilation 5 - Intranet 73
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de , a ] de EEEE
pour toute règle B ::= pour toute règle B ::= de G’ de G’
9 octobre 2007 Cours de compilation 5 - Intranet 74
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de , a ] de EEEE
pour toute règle B ::= pour toute règle B ::= de G’ de G’
pour tout terminal b pour tout terminal b Prem ( Prem ( a )a )
9 octobre 2007 Cours de compilation 5 - Intranet 75
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de EE , a ] de EE
pour toute règle B ::= pour toute règle B ::= de G’ de G’
pour tout terminal b pour tout terminal b Prem ( Prem ( a )a )
faire : rajouter [ B ::= . faire : rajouter [ B ::= . , b ] à EE si elle , b ] à EE si elle n’yn’y
figure pas encore.figure pas encore.
9 octobre 2007 Cours de compilation 5 - Intranet 76
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de EE , a ] de EE
pour toute règle B ::= pour toute règle B ::= de G’ de G’
pour tout terminal b pour tout terminal b Prem ( Prem ( a )a )
faire : rajouter [ B ::= . faire : rajouter [ B ::= . , b ] à EE si elle , b ] à EE si elle n’yn’y
figure pas encore.figure pas encore.
9 octobre 2007 Cours de compilation 5 - Intranet 77
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ensembles d’entités EE doivent être clos par Les ensembles d’entités EE doivent être clos par
l’opération de fermeture !l’opération de fermeture !
• fermeture ( EE ) est défini comme suit :fermeture ( EE ) est défini comme suit :
tant que nous pouvons ajouter des entitéstant que nous pouvons ajouter des entités
pour toute entité [ A ::= pour toute entité [ A ::= . B . B , a ] de EE , a ] de EE
pour toute règle B ::= pour toute règle B ::= de G’ de G’
pour tout terminal b pour tout terminal b Prem ( Prem ( a )a )
faire : rajouter [ B ::= . faire : rajouter [ B ::= . , b ] à EE si elle , b ] à EE si elle n’yn’y
figure pas encore.figure pas encore.
9 octobre 2007 Cours de compilation 5 - Intranet 78
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Illustration : Soit EE = { [ A ::= Illustration : Soit EE = { [ A ::= . B c , a ] } . B c , a ] }
9 octobre 2007 Cours de compilation 5 - Intranet 79
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Illustration : Soit EE = { [ A ::= Illustration : Soit EE = { [ A ::= . B c , a ] } . B c , a ] }
• Soient les règles B ::= b | C d et C ::= e !Soient les règles B ::= b | C d et C ::= e !
9 octobre 2007 Cours de compilation 5 - Intranet 80
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Illustration : Soit EE = { [ A ::= Illustration : Soit EE = { [ A ::= . B c , a ] } . B c , a ] }
• Soient les règles B ::= b | C d et C ::= e !Soient les règles B ::= b | C d et C ::= e !
• Successivement, EE devient :Successivement, EE devient :
{ [ A ::= { [ A ::= . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] }c ] }
9 octobre 2007 Cours de compilation 5 - Intranet 81
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Illustration : Soit EE = { [ A ::= Illustration : Soit EE = { [ A ::= . B c , a ] } . B c , a ] }
• Soient les règles B ::= b | C d et C ::= e !Soient les règles B ::= b | C d et C ::= e !
• Successivement, EE devient :Successivement, EE devient :
{ [ A ::= { [ A ::= . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] }c ] }
etet
{ [ A ::= { [ A ::= . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] , . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] , [ C ::= . e , d ] }[ C ::= . e , d ] }
9 octobre 2007 Cours de compilation 5 - Intranet 82
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Illustration : Soit EE = { [ A ::= Illustration : Soit EE = { [ A ::= . B c , a ] } . B c , a ] }
• Soient les règles B ::= b | C d et C ::= e !Soient les règles B ::= b | C d et C ::= e !
• Successivement, EE devient :Successivement, EE devient :
{ [ A ::= { [ A ::= . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] }c ] }
etet
{ [ A ::= { [ A ::= . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] , . B c , a ] , [ B ::= . b , c ] , [ B ::= . C d , c ] , [ C ::= . e , d ] }[ C ::= . e , d ] }
• Ceci revient en fait à faire les réductions suivantes, qui Ceci revient en fait à faire les réductions suivantes, qui font apparaître des terminaux après le . !font apparaître des terminaux après le . !
. B c. B c . b c. b c
. C d c. C d c . e d c. e d c
9 octobre 2007 Cours de compilation 5 - Intranet 83
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération goto :L’opération goto :
• Soit EI un ensemble d’entités et X un terminal ou Soit EI un ensemble d’entités et X un terminal ou un non-terminal :un non-terminal :
9 octobre 2007 Cours de compilation 5 - Intranet 84
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération goto :L’opération goto :
• Soit EI un ensemble d’entités et X un terminal ou Soit EI un ensemble d’entités et X un terminal ou un non-terminal :un non-terminal :
goto ( EI , X ) =goto ( EI , X ) =
soit EJ l’ensemble des entités [ A ::= soit EJ l’ensemble des entités [ A ::= X . X . , , a ]a ]
telles que [ A ::= telles que [ A ::= . X . X , a ] est dans EI , a ] est dans EI
alors rendre fermeture ( EJ )alors rendre fermeture ( EJ )
9 octobre 2007 Cours de compilation 5 - Intranet 85
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération goto :L’opération goto :
• Soit EI un ensemble d’entités et X un terminal ou Soit EI un ensemble d’entités et X un terminal ou un non-terminal :un non-terminal :
goto ( EI , X ) =goto ( EI , X ) =
soit EJ l’ensemble des entités [ A ::= soit EJ l’ensemble des entités [ A ::= X . X . , , a ]a ]
telles que [ A ::= telles que [ A ::= . X . X , a ] est dans EI , a ] est dans EI
alors rendre fermeture ( EJ )alors rendre fermeture ( EJ )
Nous déterminons, par rapport à l’état courant, quelNous déterminons, par rapport à l’état courant, quelsera l’état atteint lorsque nous aurons reconnu X !sera l’état atteint lorsque nous aurons reconnu X !
9 octobre 2007 Cours de compilation 5 - Intranet 86
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
9 octobre 2007 Cours de compilation 5 - Intranet 87
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
9 octobre 2007 Cours de compilation 5 - Intranet 88
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
tant que nous pouvons rajouter des ensembles tant que nous pouvons rajouter des ensembles d’entités à Cd’entités à C
9 octobre 2007 Cours de compilation 5 - Intranet 89
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
tant que nous pouvons rajouter des ensembles tant que nous pouvons rajouter des ensembles d’entités à Cd’entités à C
pour tout ensemble EE de C et tout symbole Xpour tout ensemble EE de C et tout symbole X
9 octobre 2007 Cours de compilation 5 - Intranet 90
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
tant que nous pouvons rajouter des ensembles tant que nous pouvons rajouter des ensembles d’entités à Cd’entités à C
pour tout ensemble EE de C et tout symbole Xpour tout ensemble EE de C et tout symbole X
si goto ( EE , X ) n’est pas videsi goto ( EE , X ) n’est pas vide
9 octobre 2007 Cours de compilation 5 - Intranet 91
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
tant que nous pouvons rajouter des ensembles d’entités tant que nous pouvons rajouter des ensembles d’entités à Cà C
pour tout ensemble EE de C et tout symbole Xpour tout ensemble EE de C et tout symbole X
si goto ( EE , X ) n’est pas videsi goto ( EE , X ) n’est pas vide
faire : rajouter goto ( EE , X ) à C s’il n’y figure faire : rajouter goto ( EE , X ) à C s’il n’y figure paspas
encore !encore !
9 octobre 2007 Cours de compilation 5 - Intranet 92
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• L’opération tous_EE construite pour la grammaire G’ :L’opération tous_EE construite pour la grammaire G’ :
tous_EE ( G’ ) = tous_EE ( G’ ) =
C <C <-- { fermeture ( { [ S’ ::= . S , # ] } ) } { fermeture ( { [ S’ ::= . S , # ] } ) }
tant que nous pouvons rajouter des ensembles d’entités tant que nous pouvons rajouter des ensembles d’entités à Cà C
pour tout ensemble EE de C et tout symbole Xpour tout ensemble EE de C et tout symbole X
si goto ( EE , X ) n’est pas videsi goto ( EE , X ) n’est pas vide
faire : rajouter goto ( EE , X ) à C s’il n’y figure faire : rajouter goto ( EE , X ) à C s’il n’y figure paspas
encore !encore !Nous calculons tous les états atteignables à partir de C !Nous calculons tous les états atteignables à partir de C !
9 octobre 2007 Cours de compilation 5 - Intranet 93
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
9 octobre 2007 Cours de compilation 5 - Intranet 94
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
11 nn
9 octobre 2007 Cours de compilation 5 - Intranet 95
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE L’état i de l’analyseur est construit à partir de EE comme :comme :
11 nn
ii
9 octobre 2007 Cours de compilation 5 - Intranet 96
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE L’état i de l’analyseur est construit à partir de EE comme :comme :
– Si [ A ::= Si [ A ::= . a . a , b ] , b ] EE et goto ( EE , a ) EE et goto ( EE , a ) = EE= EE
alors ACTIONS ( i , a ) = SHIFT j !alors ACTIONS ( i , a ) = SHIFT j !
11 nn
ii
ii ii jj
9 octobre 2007 Cours de compilation 5 - Intranet 97
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE L’état i de l’analyseur est construit à partir de EE comme :comme :
– Si [ A ::= Si [ A ::= . a . a , b ] , b ] EE et goto ( EE , a ) EE et goto ( EE , a ) = EE= EE
alors ACTIONS ( i , a ) = SHIFT j !alors ACTIONS ( i , a ) = SHIFT j !
– Si [ A ::= Si [ A ::= . , b ] . , b ] EE et A <> S’ EE et A <> S’
alors ACTIONS ( i , b ) = REDUCE A ::= alors ACTIONS ( i , b ) = REDUCE A ::= ! !
11 nn
ii
ii ii jj
ii
9 octobre 2007 Cours de compilation 5 - Intranet 98
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des ensembles Soit C = { EE , . . . , EE } la collection des ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE comme :L’état i de l’analyseur est construit à partir de EE comme :
– Si [ A ::= Si [ A ::= . a . a , b ] , b ] EE et goto ( EE , a ) = EE EE et goto ( EE , a ) = EE
alors ACTIONS ( i , a ) = SHIFT j !alors ACTIONS ( i , a ) = SHIFT j !
– Si [ A ::= Si [ A ::= . , b ] . , b ] EE et A <> S’ EE et A <> S’
alors ACTIONS ( i , b ) = REDUCE A ::= alors ACTIONS ( i , b ) = REDUCE A ::= ! !
– Si [ S’ ::= S . , # ] Si [ S’ ::= S . , # ] EE EE
alors ACTIONS ( i , # ) = ACCEPT !alors ACTIONS ( i , # ) = ACCEPT !
11 nn
ii
ii ii jj
ii
ii
9 octobre 2007 Cours de compilation 5 - Intranet 99
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE L’état i de l’analyseur est construit à partir de EE comme :comme :
– Si goto ( EE , A ) = EE , alors SUCC ( i , A ) Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j ! = j !
ii jj
11 nn
ii
9 octobre 2007 Cours de compilation 5 - Intranet 100
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des Soit C = { EE , . . . , EE } la collection des ensembles ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE L’état i de l’analyseur est construit à partir de EE comme :comme :
– Si goto ( EE , A ) = EE , alors SUCC ( i , A ) Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j ! = j !
– Toute entrée non définie par une des règles ci-dessus Toute entrée non définie par une des règles ci-dessus est est
une erreur !une erreur !
ii jj
11 nn
ii
9 octobre 2007 Cours de compilation 5 - Intranet 101
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des ensembles Soit C = { EE , . . . , EE } la collection des ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE comme :L’état i de l’analyseur est construit à partir de EE comme :
– Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j ! Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j !
– Toute entrée non définie par une des règles ci-dessus est Toute entrée non définie par une des règles ci-dessus est
une erreur !une erreur !
– L’état initial est celui qui comprend d’entité de démarrage L’état initial est celui qui comprend d’entité de démarrage
[ S’ ::= . S , # ] ![ S’ ::= . S , # ] !
ii jj
11 nn
ii
9 octobre 2007 Cours de compilation 5 - Intranet 102
Les tables d’analyse LR ( 1 )Les tables d’analyse LR ( 1 )----------------------------------------------------------------------------------------------------------------------------
----• Les ACTIONS et SUCC sont définies comme suit !Les ACTIONS et SUCC sont définies comme suit !
• Soit C = { EE , . . . , EE } la collection des ensembles Soit C = { EE , . . . , EE } la collection des ensembles
d’entités calculée par l’opération tous_EE !d’entités calculée par l’opération tous_EE !
• L’état i de l’analyseur est construit à partir de EE comme :L’état i de l’analyseur est construit à partir de EE comme :
– Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j ! Si goto ( EE , A ) = EE , alors SUCC ( i , A ) = j !
– Toute entrée non définie par une des règles ci-dessus est Toute entrée non définie par une des règles ci-dessus est
une erreur !une erreur !
– L’état initial est celui qui comprend d’entité de démarrage L’état initial est celui qui comprend d’entité de démarrage
[ S’ ::= . S , # ] ![ S’ ::= . S , # ] !
ii jj
11 nn
ii
9 octobre 2007 Cours de compilation 5 - Intranet 103
C O N C R E T E M E N TC O N C R E T E M E N T
Y A C CY A C C
E TE T
B I S O NB I S O N
9 octobre 2007 Cours de compilation 5 - Intranet 104
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
9 octobre 2007 Cours de compilation 5 - Intranet 105
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
• Nous associons du code aux différentes règles Nous associons du code aux différentes règles reconnues !reconnues !
9 octobre 2007 Cours de compilation 5 - Intranet 106
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
• Nous associons du code aux différentes règles Nous associons du code aux différentes règles reconnues !reconnues !
• yacc construit un analyseur LALR qui comporte notre yacc construit un analyseur LALR qui comporte notre code !code !
9 octobre 2007 Cours de compilation 5 - Intranet 107
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
• Nous associons du code aux différentes règles Nous associons du code aux différentes règles reconnues !reconnues !
• yacc construit un analyseur LALR qui comporte notre yacc construit un analyseur LALR qui comporte notre code !code !
• Nous soumettons ensuite le texte à reconnaître à yacc !Nous soumettons ensuite le texte à reconnaître à yacc !
9 octobre 2007 Cours de compilation 5 - Intranet 108
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
• Nous associons du code aux différentes règles Nous associons du code aux différentes règles reconnues !reconnues !
• yacc construit un analyseur LALR qui comporte notre yacc construit un analyseur LALR qui comporte notre code !code !
• Nous soumettons ensuite le texte à reconnaître à yacc !Nous soumettons ensuite le texte à reconnaître à yacc !
• Cette démarche permet de générer rapidement un code Cette démarche permet de générer rapidement un code assembleur intermédiaire !assembleur intermédiaire !
9 octobre 2007 Cours de compilation 5 - Intranet 109
YACC et BISONYACC et BISON----------------------------------------------------------------------------------------------------------------------------
----Yet Another Compiler Compiler ( bison son remake ) !Yet Another Compiler Compiler ( bison son remake ) !
• Nous donnons une grammaire !Nous donnons une grammaire !
• Nous associons du code aux différentes règles Nous associons du code aux différentes règles reconnues !reconnues !
• yacc construit un analyseur LALR qui comporte notre yacc construit un analyseur LALR qui comporte notre code !code !
• Nous soumettons ensuite le texte à reconnaître à yacc !Nous soumettons ensuite le texte à reconnaître à yacc !
• Cette démarche permet de générer rapidement un code Cette démarche permet de générer rapidement un code assembleur intermédiaire !assembleur intermédiaire !
• L’optimisation de ce code est faite en dehors de yacc ! L’optimisation de ce code est faite en dehors de yacc !
9 octobre 2007 Cours de compilation 5 - Intranet 110
U NU N
E X E M P L EE X E M P L E
P A R T I E LP A R T I E L
9 octobre 2007 Cours de compilation 5 - Intranet 111
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | (E)F ::= id | (E)
9 octobre 2007 Cours de compilation 5 - Intranet 112
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
9 octobre 2007 Cours de compilation 5 - Intranet 113
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, . . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 114
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, [ E -> . T E’ , # ] [ E -> . T E’ , # ] ,, . . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 115
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, [ E -> . T E’ , # ] [ E -> . T E’ , # ] ,, [ T -> . F T’ , + ][ T -> . F T’ , + ] ,, [ T -> . F T’ , # ][ T -> . F T’ , # ] ,, . . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 116
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= idF ::= id | ( E ) | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, [ E -> . T E’ , # ] [ E -> . T E’ , # ] ,, [ T -> . F T’ , + ][ T -> . F T’ , + ] ,, [ T -> . F T’ , # ][ T -> . F T’ , # ] ,, [ F -> . id , * ][ F -> . id , * ] ,, [ F -> . id , + ][ F -> . id , + ] ,, [ F -> . id , # ][ F -> . id , # ] ,, . . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 117
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::=F ::= id | id | ( E )( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, [ E -> . T E’ , # ] [ E -> . T E’ , # ] ,, [ T -> . F T’ , + ][ T -> . F T’ , + ] ,, [ T -> . F T’ , # ][ T -> . F T’ , # ] ,, [ F -> . id , * ][ F -> . id , * ] ,, [ F -> . id , + ][ F -> . id , + ] ,, [ F -> . id , # ][ F -> . id , # ] ,, [ F -> . ( E ) , * ][ F -> . ( E ) , * ] ,, [ F -> . ( E ) , + ][ F -> . ( E ) , + ] ,, [ F -> . ( E ) , # ][ F -> . ( E ) , # ] }}
9 octobre 2007 Cours de compilation 5 - Intranet 118
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ { [ S -> . E , # ] [ S -> . E , # ] ,, [ E -> . T E’ , # ] [ E -> . T E’ , # ] ,, [ T -> . F T’ , { + , # } ][ T -> . F T’ , { + , # } ] ,, [ F -> . id , { * , + , # } ][ F -> . id , { * , + , # } ] ,, [ F -> . ( E ) , { * , + , # } ] [ F -> . ( E ) , { * , + , # } ] }} Plus compact :Plus compact :
9 octobre 2007 Cours de compilation 5 - Intranet 119
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----•Soit la grammaire :Soit la grammaire :
S ::= ES ::= EE ::= T E’E ::= T E’E’ ::= + E’ | E’ ::= + E’ | T ::= F T’T ::= F T’T’ ::= * T’ | T’ ::= * T’ | F ::= id | ( E )F ::= id | ( E )
Le premier état :Le premier état :
F ( {F ( { [ S -> . E , # ] [ S -> . E , # ] } ) =} ) =
{ [ S -> .{ [ S -> . E E , # ], # ] ,, [ E -> .[ E -> . T T E’ , # ]E’ , # ] ,, [ T -> .[ T -> . F F T’ , { + , # } ]T’ , { + , # } ] ,, [ F -> .[ F -> . id id , { * , + , # } ], { * , + , # } ] ,, [ F -> .[ F -> . ( ( E ) , { * , + , # } ]E ) , { * , + , # } ] }} Plus compact :Plus compact :
Maintenant, nous allons calculer lesMaintenant, nous allons calculer lestransitions pour transitions pour EE , , TT , , FF , , idid et et (( . .
9 octobre 2007 Cours de compilation 5 - Intranet 120
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
. . .. . .
11
EE
22
9 octobre 2007 Cours de compilation 5 - Intranet 121
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
{ { [ S -> E . , # ] [ S -> E . , # ] }}
C’est le secondC’est le secondétat qui est enétat qui est en
fait l’acceptation !fait l’acceptation !
11
EE
22
9 octobre 2007 Cours de compilation 5 - Intranet 122
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
{ { [ S -> E . , # ] [ S -> E . , # ] }}
C’est le secondC’est le secondétat qui est enétat qui est en
fait l’acceptation !fait l’acceptation !
11
EE
22
TT 33F ( {F ( { [ E -> T . E’ , # ] [ E -> T . E’ , # ] } ) =} ) =
. . . . . .
9 octobre 2007 Cours de compilation 5 - Intranet 123
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
{ { [ S -> E . , # ] [ S -> E . , # ] }}
C’est le secondC’est le secondétat qui est enétat qui est en
fait l’acceptation !fait l’acceptation !
11
EE
22
TT 33F ( {F ( { [ E -> T . E’ , # ] [ E -> T . E’ , # ] } ) =} ) =
{ { [ E -> T . E’ , # ] [ E -> T . E’ , # ] ,, [ E’ -> . + E’ , # ] [ E’ -> . + E’ , # ] ,, [ E’ -> . [ E’ -> . , # ] , # ] }}
9 octobre 2007 Cours de compilation 5 - Intranet 124
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
{ { [ S -> E . , # ] [ S -> E . , # ] }}
C’est le secondC’est le secondétat qui est enétat qui est en
fait l’acceptation !fait l’acceptation !
11
EE
22
TT 33F ( {F ( { [ E -> T . E’ , # ] [ E -> T . E’ , # ] } ) =} ) =
{ { [ E -> T . E’ , # ] [ E -> T . E’ , # ] ,, [ E’ -> . + E’ , # ] [ E’ -> . + E’ , # ] ,, [ E’ -> . [ E’ -> . , # ] , # ] }}FF
44F ( {F ( { [ T -> F . T’ , { + , # } ] [ T -> F . T’ , { + , # } ] } ) =} ) =
. . . . . .
9 octobre 2007 Cours de compilation 5 - Intranet 125
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =
{ { [ S -> E . , # ] [ S -> E . , # ] }}
C’est le secondC’est le secondétat qui est enétat qui est en
fait l’acceptation !fait l’acceptation !
11
EE
22
TT 33F ( {F ( { [ E -> T . E’ , # ] [ E -> T . E’ , # ] } ) =} ) =
{ { [ E -> T . E’ , # ] [ E -> T . E’ , # ] ,, [ E’ -> . + E’ , # ] [ E’ -> . + E’ , # ] ,, [ E’ -> . [ E’ -> . , # ] , # ] }}FF
44F ( {F ( { [ T -> F . T’ , { + , # } ] [ T -> F . T’ , { + , # } ] } ) =} ) =
{ { [ T -> F . T’ , { + , # } ] [ T -> F . T’ , { + , # } ] ,, [ T’ -> . * T’ , { + , # } ] [ T’ -> . * T’ , { + , # } ] ,, [ T’ -> . [ T’ -> . , { + , # } ] , { + , # } ] }}
9 octobre 2007 Cours de compilation 5 - Intranet 126
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ F -> id . , { * , + , # } ] [ F -> id . , { * , + , # } ] } ) =} ) =
{ { [ F -> id . , { * , + , # } ][ F -> id . , { * , + , # } ] }}
11
idid
55. . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 127
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ F -> id . , { * , + , # } ] [ F -> id . , { * , + , # } ] } ) =} ) =
{ { [ F -> id . , { * , + , # } ][ F -> id . , { * , + , # } ] }}
11
idid
55
(( 66F ( {F ( { [ F -> ( . E ) , { * , + , # } ] [ F -> ( . E ) , { * , + , # } ] } ) =} ) =
. . . . . .
. . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 128
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ F -> id . , { * , + , # } ] [ F -> id . , { * , + , # } ] } ) =} ) =
{ { [ F -> id . , { * , + , # } ][ F -> id . , { * , + , # } ] }}
11
idid
55
(( 66F ( {F ( { [ F -> ( . E ) , { * , + , # } ] [ F -> ( . E ) , { * , + , # } ] } ) =} ) =
{ { [ F -> ( . E ) , { * , + , # } ] [ F -> ( . E ) , { * , + , # } ] ,, [ E -> . T E’ , ) ] [ E -> . T E’ , ) ] ,, [ T -> . F T’ , { + , ) } ][ T -> . F T’ , { + , ) } ] ,, [ F -> . id , { * , + , ) } ][ F -> . id , { * , + , ) } ] , , [ F -> . ( E ) , { * , + , ) } ][ F -> . ( E ) , { * , + , ) } ] } }
. . .. . .
9 octobre 2007 Cours de compilation 5 - Intranet 129
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----F ( {F ( { [ F -> id . , { * , + , # } ] [ F -> id . , { * , + , # } ] } ) =} ) =
{ { [ F -> id . , { * , + , # } ][ F -> id . , { * , + , # } ] }}
11
idid
55
(( 66F ( {F ( { [ F -> ( . E ) , { * , + , # } ] [ F -> ( . E ) , { * , + , # } ] } ) =} ) =
{ { [ F -> ( . E ) , { * , + , # } ] [ F -> ( . E ) , { * , + , # } ] ,, [ E -> . T E’ , ) ] [ E -> . T E’ , ) ] ,, [ T -> . F T’ , { + , ) } ][ T -> . F T’ , { + , ) } ] ,, [ F -> . id , { * , + , ) } ][ F -> . id , { * , + , ) } ] , , [ F -> . ( E ) , { * , + , ) } ][ F -> . ( E ) , { * , + , ) } ] } }
. . .. . .
Et, nous faisons le même travailEt, nous faisons le même travailpour les nouveaux états 2 à 6 !pour les nouveaux états 2 à 6 !
9 octobre 2007 Cours de compilation 5 - Intranet 130
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----
11ACTIONS ( , id ) = SHIFT ( )ACTIONS ( , id ) = SHIFT ( )55
Quelques règles :Quelques règles :
9 octobre 2007 Cours de compilation 5 - Intranet 131
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----
11ACTIONS ( , id ) = SHIFT ( )ACTIONS ( , id ) = SHIFT ( )55
Quelques règles :Quelques règles :
11ACTIONS ( , ( ) = SHIFT ( )ACTIONS ( , ( ) = SHIFT ( )66
9 octobre 2007 Cours de compilation 5 - Intranet 132
ACTIONS ( , # ) = ACCEPTACTIONS ( , # ) = ACCEPT
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----
11ACTIONS ( , id ) = SHIFT ( )ACTIONS ( , id ) = SHIFT ( )55
Quelques règles :Quelques règles :
11ACTIONS ( , ( ) = SHIFT ( )ACTIONS ( , ( ) = SHIFT ( )66
22
9 octobre 2007 Cours de compilation 5 - Intranet 133
ACTIONS ( , # ) = ACCEPTACTIONS ( , # ) = ACCEPT
Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------
----
11ACTIONS ( , id ) = SHIFT ( )ACTIONS ( , id ) = SHIFT ( )55
Quelques règles :Quelques règles :
11ACTIONS ( , ( ) = SHIFT ( )ACTIONS ( , ( ) = SHIFT ( )66
22
ACTIONS ( , + ) = REDUCE ( F -> id . )ACTIONS ( , + ) = REDUCE ( F -> id . )55
9 octobre 2007 Cours de compilation 5 - Intranet 134
RésuméRésumé----------------------------------------------------------------------------------------------------------------------------
----
•Techniques d’analyse ascendantesTechniques d’analyse ascendantes
9 octobre 2007 Cours de compilation 5 - Intranet 135
C ’ e S t L a F i N ! C ’ e S t L a F i N ! ! !! !
b O n N eb O n N eJ o U r N é E ! ! !J o U r N é E ! ! !