Listes linéaires chaînées Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
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és C : pointeur dans TABOB vers le résultat A, B non utilisés C : pointeur dans TABOB vers le maillon (‘Allouer’,A,B, C )
Sémantique des listes linéaires : Quadruplés Accès VALEUR(Exp); SUIVANT(Exp) A : pointeur dans TABOB vers le maillon B non utilisés C : pointeur dans TABOB vers le résultat A : pointeur dans TABOB vers le maillon B non utilisés C : 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 f1 B non utilisés C : pointeur dans TABOB vers le résultat de f2 A : pointeur dans TABOB vers le résultat de f1 B non utilisés C : 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ère Chaîne chaîne de caractères Idf identificateur Opr dans {, >=, =, <> } Opa dans { +, -, Ou } Opm dans { *, /, Et } Sign dans {+, -} Tableau est synonyme de Vecteur Init_tableau est synonyme de Init_vecteur
Listes linéaires chaînées : Déclarations [ ~Soit|Soient~ ] Debut Fin [;] { ~ | ~ [;] }* Action Idf [ ( ) ] [;] [ ~Soit|Soient~ ] Debut Fin Fonction Idf ( ) : [ ~Soit|Soient~ ] Debut Fin ;{ [~Soit|Soient~] ;}* [Sep ~ |~Action|Fonction( )~ ~] Idf {, Idf}*
Listes linéaires chaînées : Déclarations Types | | | Machine_car | Machine_nombre | Tableau ( ) [De~ | Types~ ] | [Structure ](Types {, Types }*) [Structure ]( ~ Types | Vecteur(Cste) De Types ~ {, ~ Types | Vecteur(Cste) De Types ~ }*) Cste {, Cste}* [Pointeur vers [Sep] ] Liste [ De ~Types | ~ |
Listes linéaires chaînées : Instructions { ; }* Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* ) | Tantque [ : ] Fintantque | Si [:] [Sinon ] Fsi | Pour Idf:=, [, ][:] Finpour | Appel Idf [(Exp {, }*)] |
Listes linéaires chaînées : Instructions ~ |Init_vecteur|Init_struct|Creer_mnombre~ ( Idf, [[ ~ |[[ {, }*]] ~ {, ~ |[[ {, }*]]~}* ]] ) | Aff_element ( [[ {, }* ], ) | Aff_struct(Idf, Cste, ) | Creer_mcar(Idf, [[ Chaine ]]) | ~Lirecar|Lirenombre~ (Idf, Idf) ~ Aff_adr|Aff_val~ (, ) | ~Liberer| Allouer~ ( ) | Creer_liste
Listes linéaires chaînées : Expressions [ Opr ] [Sign] { Opa }* {Opm }* Idf [(Exp {, }*)] | Cste | ( ) | | | Non | Vrai | Faux | | Chaine Element ( [[ {, }* ]] ) | Struct ( Idf, Cste) ~Nbrcar|NbrNombre~ (Idf) ~Valeur|Suivant~ ( ) | Nil
Sémantique des listes linéaires : Fonctions sémantiques [Pointeur vers [Sep] ] Liste [ De ~Types | ~ Description Fx Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques ~Liberer| Allouer~ ( ) Description Fx Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques ~ Aff_adr|Aff_val~ (, ) Description Fx Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques ~ Creer_liste ( Idf, [[ ~ |[[ {, }*]] ~ {, ~ |[[ {, }*]]~}* ]] ) Description Fx Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques Nil Description Fx Fonctions sémantiques et Descriptions à trouver
Sémantique des listes linéaires : Fonctions sémantiques ~Valeur|Suivant~ ( ) | Description Fx 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’ ‘C’ TABOB 3 LONGZDD 3 Quadruplés générés ‘Alloue’0 1 2 ‘Aff_v’ ‘Aff_a’ TABTYP LEW 0 ‘5’,’55’,’555’,’Nil’ TABCONS
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) Ftq fin ‘L’ ‘C’ ‘X’412 ‘Y’ TABOB 5 LONGZDD 3 Quadruplés générés ‘Creer’004 ‘Aff’10 ‘<>’167 ‘B’749 ‘Valeu’18 ‘Ecrir’11 ‘Suiva’19 ‘Aff’19 ‘Br’ TABTYP LEWB 0 ‘3’,’6’,’43’,’32’,’Nil’ TABCONS TABCOMP 2,3,4,
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;