9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse...

Preview:

Citation preview

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 ! ! !

Recommended