Download - 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]
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.
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 )
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 )
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 )
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
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}*
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>~ |
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>}*)] |
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
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
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
Sémantique des listes linéaires : Fonctions sémantiques
<Inst> ~Liberer| Allouer~ ( <Exp> )
Description Fx
<Inst>
Fonctions sémantiques et Descriptions à trouver
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
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
Sémantique des listes linéaires : Fonctions sémantiques
<Facteur> Nil
Description Fx
<Facteur>
Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques
<Fonction> ~Valeur|Suivant~ ( <Fonct> ) |
Description Fx
<Fonction>
Fonctions sémantiques et Descriptions à trouver
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
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
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;