Listes linéaires chaînées

20
Listes linéaires chaînées Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: [email protected]

description

Listes linéaires chaînées. Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: [email protected]. Listes linéaires chaînées : Objectif. On définit une machine abstraite sur les listes permettant l’initiation aux structures dynamiques de données - PowerPoint PPT Presentation

Transcript of Listes linéaires chaînées

Page 1: Listes linéaires chaînées

Listes linéaires chaînées

Pr ZEGOUR DJAMEL EDDINEEcole Supérieure d’Informatique (ESI)http://zegour.esi.dz/ email: [email protected]

Page 2: Listes linéaires chaînées

Listes linéaires chaînées : Objectif

On définit une machine abstraite sur les listes permettant l’initiation aux structures dynamiques de données

Cette machine abstraite offre les opérations de base sur les listes :ALLOUER , LIBERER , VALEUR, SUIVANT, AFF_ADR, AFF_VAL

Sémantique des listes linéaires chaînées : Il s’agit de les transformer en des formes internes qui permettent de faciliter leur interprétation ou génération de code.

Page 3: Listes linéaires chaînées

Sémantique des listes linéaires : Quadruplés

Allocation / Libération : ALLOUER(P); LIBERER(P)

A, B non utilisésC : pointeur dans TABOB vers le résultat

A, B non utilisésC : pointeur dans TABOB vers le maillon

(‘Allouer’,A ,B, C )

(‘Allouer’,A ,B, C )

Page 4: Listes linéaires chaînées

Sémantique des listes linéaires : Quadruplés

Accès VALEUR(Exp); SUIVANT(Exp)

A : pointeur dans TABOB vers le maillonB non utilisésC : pointeur dans TABOB vers le résultat

A : pointeur dans TABOB vers le maillonB non utilisésC : pointeur dans TABOB vers le résultat

(‘Valeur’,A ,B, C )

(‘Suivant’,A ,B, C )

Page 5: Listes linéaires chaînées

Sémantique des listes linéaires : Quadruplés

Mise à jour : AFF_ADR(Exp1, Exp2) ; AFF_VAL(Exp1, Exp2)

A : pointeur dans TABOB vers le résultat de f1B non utilisésC : pointeur dans TABOB vers le résultat de f2

A : pointeur dans TABOB vers le résultat de f1B non utilisésC : pointeur dans TABOB vers le résultat de f2

(‘Aff_val’,A ,B, C )

(‘Aff_adr’,A ,B, C )

Page 6: Listes linéaires chaînées

Listes linéaires chaînées : Déclarations

Types dans {Entier, Booleen, Car, Chaine}Sep dans {:, Un, Une, Des}Cste constante numérique entièreChaîne  chaîne de caractèresIdf identificateurOpr dans { <, <=, >, >=, =, <> }Opa dans { +, -, Ou }Opm dans { *, /, Et }Sign dans {+, -}Tableau est synonyme de VecteurInit_tableau est synonyme de Init_vecteur

Page 7: Listes linéaires chaînées

Listes linéaires chaînées : Déclarations

<Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;] { ~<Act> | <Fonct>~ [;] }* <Act> Action Idf [ ( <Li> ) ] [;]

[ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <Fonct> Fonction Idf ( <Li> ) : <Typ>

[ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <Ps> <S>;{ [~Soit|Soient~] <S>;}* <S> <Li>[Sep ~<Typ>|~Action|Fonction(<Typ>)~ ~]<Li> Idf {, Idf}*

Page 8: Listes linéaires chaînées

Listes linéaires chaînées : Déclarations

<Typ> Types | <Structsimple> | <Structcomplexe> |Machine_car |Machine_nombre |

Tableau (<Lc>) [De~<Structsimple> | Types~ ] | 

<Structsimple> [Structure ](Types {, Types }*) <Structcomplexe> [Structure ]( ~ Types | Vecteur(Cste) De Types ~

{, ~ Types | Vecteur(Cste) De Types ~ }*)

 <Lc> Cste {, Cste}* 

[Pointeur vers [Sep] ] Liste [ De ~Types | <Structsimple>~ |

Page 9: Listes linéaires chaînées

Listes linéaires chaînées : Instructions

< Lis > < Inst > { ; < Inst > }* <Inst>

Idf := <Exp> |  Lire ( Idf {, Idf }* ) |

  Ecrire (<Exp> {,<Exp>}* ) |Tantque <Exp> [ : ] <Lis> Fintantque |Si <Exp> [:] <Lis> [Sinon <Lis>] Fsi |Pour Idf:= <Exp>,<Exp> [, <Exp>][:] <Lis> Finpour |Appel Idf [(Exp {,<Exp>}*)] |

   

Page 10: Listes linéaires chaînées

Listes linéaires chaînées : Instructions

 <Inst>

~ |Init_vecteur|Init_struct|Creer_mnombre~ ( Idf , [[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) |

Aff_element ( <Exp> [[ <Exp> {, <Exp> }* ] ,<Exp> ) |Aff_struct(Idf, Cste, <Exp>) |Creer_mcar(Idf, [[ Chaine ]]) |~Lirecar|Lirenombre~ (Idf, Idf)

~ Aff_adr|Aff_val~ ( <Exp> , <Exp> ) |

~Liberer| Allouer~ ( <Exp> ) |

Creer_liste

Page 11: Listes linéaires chaînées

Listes linéaires chaînées : Expressions

<Exp> <Exps>[ Opr <Exps>] <Exps> [Sign] <Terme> { Opa <Terme> }* <Terme> <Facteur>{Opm <Facteur>}* <Facteur> Idf [(Exp {,<Exp>}*)] | Cste |

( <Exp>) | <Fonct> | | Non <Facteur> | Vrai | Faux | | Chaine

 <Fonct>

Element ( <Fonct> [[ <Exp> {, <Exp> }* ]] ) |Struct ( Idf, Cste) ~Nbrcar|NbrNombre~ (Idf)

~Valeur|Suivant~ ( <Fonct> ) |

Nil

Page 12: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Typ> [Pointeur vers [Sep] ] Liste [ De ~Types | <Structsimple>~

Description Fx

<Typ>

Fonctions sémantiques et Descriptions à trouver

Page 13: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Inst> ~Liberer| Allouer~ ( <Exp> )

Description Fx

<Inst>

Fonctions sémantiques et Descriptions à trouver

Page 14: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Inst> ~ Aff_adr|Aff_val~ ( <Exp> , <Exp> )

Description Fx

<Inst>

Fonctions sémantiques et Descriptions à trouver

Page 15: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Inst> ~ Creer_liste ( Idf , [[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] )

Description Fx

<Inst>

Fonctions sémantiques et Descriptions à trouver

Page 16: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Facteur> Nil

Description Fx

<Facteur>

Fonctions sémantiques et Descriptions à trouver

Page 17: Listes linéaires chaînées

Sémantique des listes linéaires : Fonctions sémantiques

<Fonction> ~Valeur|Suivant~ ( <Fonct> ) |

Description Fx

<Fonction>

Fonctions sémantiques et Descriptions à trouver

Page 18: Listes linéaires chaînées

Sémantique des listes linéaires : Exemple1

soit L1, L2, L3 des listes;debut Allouer(L1); Allouer(L2); Allouer(L3); Aff_val(L1,5); Aff_val(L2,55); Aff_val(L3,555); Aff_adr(L1,L2);Aff_adr(L2,L3); Aff_adr(L3,Nil)fin

‘L’ 1 2 0

‘L’ 1 2 1

‘L’ 1 2 2

‘C’ 2 1 0

‘C’ 2 1 1

‘C’ 2 1 2

‘C’ 3 1 3

0

1

2

TABOB3LONGZDD

3

Quadruplés générés

‘Alloue’ 0

‘Alloue’ 1

‘Alloue’ 2

‘Aff_v’ 0 3

‘Aff_v’ 0 4

‘Aff_v’ 0 5

‘Aff_a’ 0 1

‘Aff_a’ 1 2

‘Aff_a’ 2 6

1

2

3

TABTYP LEW

0

‘5’,’55’,’555’,’Nil’TABCONS

0 1 2 3

4

5

6

4

5

6

7

8

Page 19: Listes linéaires chaînées

Sémantique des listes linéaires : Exemple2

Soit L une liste ; P un pointeur vers une liste;debut creer_liste(L, [3,6,43,32] ); P := L; Tq P <> Nil ecrire( Valeur(P)); P := Suivant (P) Ftqfin

‘L’ 1 2 0

‘L’ 1 2 1

‘C’ 2 1 0

‘C’ 2 1 1

‘C’ 2 1 2

‘C’ 2 1 3

‘C’ 3 1 4

‘X’ 4 1 2

‘Y’ 2 1 3

‘Y’ 1 2 4

0

1

2

TABOB

5LONGZDD

3

Quadruplés générés

‘Creer’ 0 0 4

‘Aff’ 1 0

‘<>’ 1 6 7

‘B’ 7 4 9

‘Valeu’ 1 8

‘Ecrir’ 1 1

‘Suiva’ 1 9

‘Aff’ 1 9

‘Br’ 2

1

2

3

TABTYP LEWB

0

‘3’,’6’,’43’,’32’,’Nil’TABCONS

0 1 2 3 4

4

5

6

4

5

6

7

8

7

8

9

TABCOMP 2,3,4,5

81

0

Page 20: Listes linéaires chaînées

Listes linéaires chaînées : Interprétation

Implémentation des listes linéaires chaînées (Description PASCAL)

Typeliste = ^Elementliste; Elementliste = RECORD Element : POINTER; Suivant : Typeliste END;