200 likes | 302 Views
Listes linéaires chaînées. Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dz. 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
E N D
Listes linéaires chaînées Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dz
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 ) (‘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 <Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;] { ~<Act> | <Fonct>~ [;] }* <Act> ActionIdf [ ( <Li> ) ] [;] [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <Fonct> FonctionIdf( <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}* [Pointeurvers [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 | PourIdf:= <Exp>,<Exp> [, <Exp>][:] <Lis> Finpour | AppelIdf [(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) ~Liberer| Allouer~ ( <Exp> ) | ~ Aff_adr|Aff_val~ ( <Exp> , <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) Nil ~Valeur|Suivant~ ( <Fonct> ) |
Sémantique des listes linéaires : Fonctions sémantiques <Typ> [Pointeurvers [Sep] ] Liste [ De ~Types | <Structsimple>~ Fonctions sémantiques et Descriptions à trouver Fx Description <Typ>
Sémantique des listes linéaires : Fonctions sémantiques <Inst> ~Liberer| Allouer~ ( <Exp> ) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des listes linéaires : Fonctions sémantiques <Inst> ~ Aff_adr|Aff_val~ ( <Exp> , <Exp> ) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des listes linéaires : Fonctions sémantiques <Inst> ~ Creer_liste(Idf,[[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des listes linéaires : Fonctions sémantiques <Facteur> Nil Fonctions sémantiques et Descriptions à trouver Fx Description <Facteur>
Sémantique des listes linéaires : Fonctions sémantiques <Fonction> ~Valeur|Suivant~ ( <Fonct> ) | Fonctions sémantiques et Descriptions à trouver Fx Description <Fonction>
Sémantique des listes linéaires : Exemple1 0 0 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 1 1 2 2 3 3 4 4 5 5 6 6 7 8 TABOB LONGZDD 3 TABTYP LEW Quadruplés générés TABCONS ‘5’,’55’,’555’,’Nil’ 0 1 2 3
Sémantique des listes linéaires : Exemple2 0 0 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 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 LONGZDD 5 Quadruplés générés 9 TABTYP LEWB TABOB TABCOMP 0 2,3,4,5 TABCONS ‘3’,’6’,’43’,’32’,’Nil’ 8 1 0 1 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;