Transcript
Page 1: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

9 octobre 2007 Cours de compilation 5 - Intranet 1

Cours de compilationCours de compilation

Techniques d’analyseTechniques d’analyseascendantesascendantes

Page 2: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 3: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 )

Page 4: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 )

Page 5: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 6: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 7: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 8: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 9: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 10: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 . . . . . . ))

Page 11: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 . . . . . . ))

Page 12: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 . . . . . . ))

Page 13: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 14: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 15: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 16: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 17: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 18: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 19: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 20: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 21: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 22: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 23: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ) ,

Page 24: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 25: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 26: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 27: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 28: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

9 octobre 2007 Cours de compilation 5 - Intranet 28

L’analyseur ascendantL’analyseur ascendant----------------------------------------------------------------------------------------------------------------------------

----• Une vue d’ensemble :Une vue d’ensemble :

ProgrammeProgramme

LRLR

Page 29: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ##. . .. . . . . .. . .

Page 30: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

. . .. . .

Page 31: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 32: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 33: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 34: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 35: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 36: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 37: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 38: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 39: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 40: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 41: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 42: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 43: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 44: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 45: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 46: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 47: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 48: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 49: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 50: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 51: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 52: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 53: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 54: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 55: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 56: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 57: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 58: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 59: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 60: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 61: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 62: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 63: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 64: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 )

Page 65: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ .

Page 66: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 67: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ]

Page 68: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 69: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 70: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 71: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 72: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 73: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’

Page 74: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 )

Page 75: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 76: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 77: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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.

Page 78: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ] }

Page 79: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 80: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ] }

Page 81: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ] }

Page 82: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 83: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 :

Page 84: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 )

Page 85: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 86: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ ) =

Page 87: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 , # ] } ) }

Page 88: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 89: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 90: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 91: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 92: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 93: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 94: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 95: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 96: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 97: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 98: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 99: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 100: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 101: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 102: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 103: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 104: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 105: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 106: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 107: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 108: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 109: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 110: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 111: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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)

Page 112: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 , # ] } ) =} ) =

Page 113: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 , # ] ,, . . .. . .

Page 114: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ , # ] ,, . . .. . .

Page 115: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ , # ] ,, . . .. . .

Page 116: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 , # ] ,, . . .. . .

Page 117: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ) , # ] }}

Page 118: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 :

Page 119: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 (( . .

Page 120: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

9 octobre 2007 Cours de compilation 5 - Intranet 120

Un exemple partielUn exemple partiel----------------------------------------------------------------------------------------------------------------------------

----F ( {F ( { [ S -> E . , # ] [ S -> E . , # ] } ) =} ) =

. . .. . .

11

EE

22

Page 121: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 122: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ , # ] } ) =} ) =

. . . . . .

Page 123: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ -> . , # ] , # ] }}

Page 124: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ , { + , # } ] } ) =} ) =

. . . . . .

Page 125: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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’ -> . , { + , # } ] , { + , # } ] }}

Page 126: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 127: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ) , { * , + , # } ] } ) =} ) =

. . . . . .

. . .. . .

Page 128: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 ) , { * , + , ) } ] } }

. . .. . .

Page 129: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 !

Page 130: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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 :

Page 131: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 132: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 133: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

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

Page 134: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes

9 octobre 2007 Cours de compilation 5 - Intranet 134

RésuméRésumé----------------------------------------------------------------------------------------------------------------------------

----

•Techniques d’analyse ascendantesTechniques d’analyse ascendantes

Page 135: 9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse 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 ! ! !


Top Related