Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Suprieure dInformatique









![Fichiers : Déclarations <Algo Z> <Act> <Fonct> <Ps> <S> <Li> [ ~Soit|Soient~ <Ps> ] Fichiers : Déclarations <Algo Z> <Act> <Fonct> <Ps> <S> <Li> [ ~Soit|Soient~ <Ps> ]](https://slidetodoc.com/presentation_image/0537a1faf4575cd11d39dcb33567401b/image-10.jpg)




![Fichiers : Expressions <Exp> <Exps> <Terme> <Facteur> <Fonct> <Exps>[ Opr <Exps>] [Sign] <Terme> { Fichiers : Expressions <Exp> <Exps> <Terme> <Facteur> <Fonct> <Exps>[ Opr <Exps>] [Sign] <Terme> {](https://slidetodoc.com/presentation_image/0537a1faf4575cd11d39dcb33567401b/image-15.jpg)





















- Slides: 36
Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http: //zegour. esi. dz/ email: d_zegour@esi. dz
Fichiers : Introduction n On définit une machine abstraite sur les fichiers permettant l’initiation aux structures simples de fichiers. n Cette machine abstraite offre les opérations de base sur les fichiers : OUVRIR, FERMER, LIRESEQ, ECRIRESEQ, LIREDIR, ECRIREDIR, RAJOUTER, FINFICH, ENTETE, AFF_ENTETE, ALLOC_BLOC n Sémantique des fichiers : 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 fichiers : Quadruplés n Déclaration de Fichier (Voir grammaire) (‘Df’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : est égal à 1 (absence de l’entête), égal à 2 (présence de l’entête) C : pointeur dans TABOB vers la constante contenant le type de l’entête si B=2
Sémantique des fichiers : Quadruplés n Ouverture/Fermeture : OUVRIR(F, Fichier physique, Mode), FERMER(F) (‘Ouvrir’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers la constante contenant le nom du fichier physique C : pointeur dans TABOB vers la constante contenant le mode d’ouverture (‘Fermer’, A , B, C ) A, B non utilisés C : pointeur dans TABOB vers l’objet fichier
Sémantique des fichiers : Quadruplés n Accès séquentiel: : LIRESEQ(F, Tampon), ECRIRESEQ(F, Tampon), RAJOUTER(F, Tampon) (‘Lireseq’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon (‘Ecrireseq’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon (‘Rajouter’ , A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon
Sémantique des fichiers : Quadruplés n Accès direct : LIREDIR(F, Rang, Tampon), ECRIREDIR(F, Rang, Tampon) (‘Liredir’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon C : pointeur dans TABOB vers le rang (‘Ecriredir’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon C : pointeur dans TABOB vers le rang
Sémantique des fichiers : Quadruplés n Entête de fichier: : ENTETE(F, Rang), AFF_ENTETE(F, Rang, Exp) (‘Entete’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le rang C : pointeur dans TABOB vers le résultat (‘Aff_entete’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le rang C : pointeur dans TABOB vers le résultat à affecter
Sémantique des fichiers : Quadruplés n Autre : FINFICH(F), ALLOC_BLOC(F) (‘Finfich’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : non utilisé C : pointeur dans TABOB vers le résultat (‘Alloc_bloc’, A , B, C ) A : pointeur dans TABOB vers l’objet fichier B : non utilisé C : pointeur dans TABOB vers le résultat
Fichiers : Déclarations Types dans {Entier, Booleen, Car, Chaine} Sep dans {: , Une, Des} Cste constante numérique entière Chaîne chaîne de caractères Idf un identificateur Opr dans { <, <=, >, >=, =, <> } Opa dans { +, -, Ou } Opm dans { *, /, Et } Sign dans {+, -} Tableau est synonyme de Vecteur Init_tableau est synonyme de Init_vecteur
Fichiers : Déclarations <Algo Z> <Act> <Fonct> <Ps> <S> <Li> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [; ] { ~<Act> | <Fonct>~ [; ] }* Action Idf [ ( <Li> ) ] [; ] [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin Fonction Idf ( <Li> ) : <Typ> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin <S>; { [~Soit|Soient~] <S>; }* <Li>[Sep ~<Typ>|~Action|Fonction(<Typ>)~ ~] Idf {, Idf}*
Fichiers : Déclarations <Typ> Types | <Structsimple> | <Structcomplexe> | Machine_car | Machine_nombre | [Pointeur vers [Sep] ] Liste [ De ~Types | <Structsimple>~ | Fichier De ~ Types | Vecteur(Cste) De ~Types | <Structsimple> | <Structcomplexe> ~ ~ Buffer <Li> [Entete] (Types {, types }*) | Tableau (<Lc>) [De~<Structsimple> | Types~ ] | <Structsimple> <Structcomplexe> <Lc> [Structure ](Types {, Types }*) [Structure ]( ~ Types | Vecteur(Cste) De Types ~ {, ~ Types | Vecteur(Cste) De Types ~ }*) Cste {, Cste}*
Fichiers : Instructions < Lis > <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>}*)] | < Inst > { ; < Inst > }*
Fichiers : Instructions <Inst> Fermer ~Liberer| Allouer | ~ ( <Exp> ) | ~ Aff_adr|Aff_val~ ( <Exp> , <Exp> ) | Ouvrir ((Idf, Chaine) | ~ Creer_liste| Init_vecteur|Init_struct|Creer_mnombre ~ ( Idf , [[ ~<Exp>|[[<Exp> {, <Exp>}*]] ~ {, ~<Exp>|[[<Exp> {, <Exp>}*]]~}* ]] ) | Aff_element ( <Exp> [[ <Exp> {, <Exp> }* ] , <Exp> ) | ~ Aff_struct | ~ (Idf, Cste, <Exp>) | Aff_entete Creer_mcar (Idf, [[ Chaine ]] ) | ~Lirecar|Lirenombre~ (Idf, Idf) |
Fichiers : Instructions <Inst> ~Lireseq|Ecrireseq|Rajouter~(Idf, Idf) | ~ Liredir | Ecriredir ~ (Idf, Cste, Idf)
Fichiers : Expressions <Exp> <Exps> <Terme> <Facteur> <Fonct> <Exps>[ Opr <Exps>] [Sign] <Terme> { Opa <Terme> }* <Facteur>{Opm <Facteur>}* Idf [(Exp {, <Exp>}*)] | Cste | ( <Exp>) | <Fonct> | Nil Non <Facteur> | Vrai | Faux | Chaine ~Valeur|Suivant~ ( <Fonct> ) | Element ( <Fonct> [[ <Exp> {, <Exp> }* ]] ) | ~ Struct | ~ ( Idf, Cste) | Entete ~Nbrcar|Nbr. Nombre ~ (Idf) Finfich|Alloc_bloc
Sémantique des fichiers : Fonctions sémantiques <Typ> Fichier De ~ Types | Vecteur(Cste) De ~Types | <Structsimple> | <Structcomplexe> ~ ~ Buffer <Li> [Entete] (Types {, types }*) | Fonctions sémantiques et Descriptions à trouver Fx Description <Typ>
Sémantique des fichiers : Fonctions sémantiques <Inst> Fermer ( Idf ) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des fichiers : Fonctions sémantiques <Inst> Ouvrir ((Idf, Chaine) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des fichiers : Fonctions sémantiques <Inst> Aff_entete (Idf, Cste, <Exp>) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des fichiers : Fonctions sémantiques <Inst> ~Lireseq|Ecrireseq|Rajouter~(Idf, Idf) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des fichiers : Fonctions sémantiques <Inst> ~ Liredir | Ecriredir ~ (Idf, Cste, Idf) Fonctions sémantiques et Descriptions à trouver Fx Description <Inst>
Sémantique des fichiers : Fonctions sémantiques <Fonction> Entete ( Idf, Cste) Fonctions sémantiques et Descriptions à trouver Fx Description <Fonction>
Sémantique des fichiers : Fonctions sémantiques <Fonction> ~ Finfich|Alloc_bloc ~ ( Idf, Cste) Fonctions sémantiques et Descriptions à trouver Fx Description <Fonction>
Sémantique des fichiers : Exemple 1 SOIT F 1 UN FICHIER DE ( CHAINE , ENTIER ) ENTETE ( CHAINE , ENTIER ) BUFFER V 1 ; S UNE CHAINE ; E, I : ENTIERS ; DEBUT OUVRIR ( F 1 , 'f 1. pas' , 'N' ) ; POUR I : = 1 , 3 LIRE ( S , E ) ; AFF_STRUCT ( V 1 , S ) ; AFF_STRUCT ( V 1 , 2 , E ) ; ECRIRESEQ ( F 1 , V 1 ) ; FINPOUR ; AFF_ENTETE ( F 1 , 'Z' ) ; AFF_ENTETE ( F 1 , 2 , I - 1 ) ; FERMER ( F 1 ) ; FIN
Sémantique des fichiers : Exemple 1(suite) 1 0 ‘L’ 1 8 0 9 1 ‘C’ 3 1 0 3 2 ‘L’ 2 4 1 ‘De’ 4 3 ‘L’ 3 1 2 4 ‘De’ 5 4 ‘L’ 3 1 3 5 ‘Ouvrir’ 0 7 5 ‘L’ 3 1 4 6 ‘Aff’ 5 8 6 ‘C’ 3 1 1 7 ‘<=’ 5 9 10 7 ‘C’ 4 1 2 8 ‘B’ 10 9 15 8 ‘C’ 4 1 3 9 ‘Lire’ 0 1 9 ‘C’ 4 1 4 4, 5, 6, 7, 8 10 ‘Aff_st’ 2 1 3 10 ‘X’ 9 1 5 2 11 ‘Aff_st’ 2 2 4 11 ‘C’ 3 1 5 12 ‘Ecrse’ 1 1 12 ‘C’ 4 1 6 8 13 ‘X’ 3 1 6 ‘SE’, ‘f 1. pas’, ‘N’, ‘ 1’, ‘ 3’, ‘ 2’, ’Z’ 0 1 2 3 4 5 TABCONS LONGZDD 6 TABTYP F(SE)*SEB TABCOMP 0 1 6 0 ‘Df’ 0 1 ‘Ds’ 2 2 ‘Dc’ 3 16 ‘-E’ 5 8 13 13 ‘+E’ 5 17 ‘Aff-en’ 0 2 13 14 ‘Br’ 7 18 ‘Ferm’ 0 15 ‘Aff-en’ 0 2 6 5 TABOB 1 Quadruplés générés 12
Sémantique des fichiers : Exemple 2 SOIT F 1 UN FICHIER DE ( CHAINE , ENTIER ) ENTETE ( CHAINE , ENTIER ) BUFFER V 1 ; DEBUT OUVRIR ( F 1 , 'f 1. pas' , 'A' ) ; ECRIRE ( ENTETE ( F 1 , 1 ) ) ; ECRIRE ( ENTETE ( F 1 , 2 ) ) ; TQ NON FINFICH ( F 1 ) LIRESEQ ( F 1 , V 1 ) ; ECRIRE ( V 1 ) FTQ ; FIN
Sémantique des fichiers : Exemple 2 (suite) ‘SE’, ‘f 1. pas’, ‘A’, ‘ 1’, ‘ 2’ 0 1 2 3 4 TABCONS LONGZDD TABTYP 5 F(SE)*SEB 0 ‘Df’ 0 1 ‘Ds’ 2 2 ‘Ouvrir’ 0 3 ‘Entet’ 4 2 1 0 ‘L’ 1 8 0 9 1 ‘C’ 3 1 0 3 4 2 ‘L’ 2 4 1 0 1 6 3 ‘C’ 3 1 1 ‘Ecrire’ 0 1 4 ‘C’ 3 1 2 5 ‘Entet’ 0 2 5 ‘C’ 4 1 3 6 ‘Ecrire’ 1 1 6 ‘Y’ 3 1 2 7 ‘Finfic’ 0 9 7 ‘C’ 4 1 4 8 ‘Non’ 9 10 8 ‘Y’ 4 1 3 9 ‘B’ 10 10 13 9 ‘X’ 9 1 4 10 ‘X’ 9 1 5 TABCOMP 0 6 10 ‘Lirese’ 0 2 1 8 11 ‘Ecrire’ 2 1 2 2 12 ‘Br’ 7 Quadruplés générés 8 TABOB
Fichiers : Interprétation Considérations : § Au niveau le plus bas, un fichier est considéré‚ comme un fichier d'octets ( FILE OF BYTE ). § Au plus, 5 fichiers (Maxfich) utilisateurs peuvent être ouvert en même temps, ce qui correspond aux fichiers internes f 1, f 2, f 3, f 4 et F 5. § A tout fichier utilisateur, on associe un numéro permettant de faire l'association entre le fichier utilisateur et le fichier interne réellement implanté. § Le fichier interne est un ensemble d'octets découpé comme suit : <---------> <------------>. . . caractéristiques article 1 article 2 § Les articles de ce fichier sont de longueur fixe.
Fichiers : Interprétation Implémentation des fichiers (Description PASCAL) TYPE Typefichier = ^Elementfichier; Elementfichier = RECORD Num : BYTE; { association } Ouvert : BOOLEAN; { Ouvert / fermé } Longueur : INTEGER; { Longueur d'un article } Longcaract : BYTE; { Longueur de la zone des caractéristiques } Caract : STRING[20]; { types des caractéristiques } Adrcaract : Pointer; { adresse vers zone des caractéristiques } END;
Fichiers : Interprétation Déclaration de fichier (Df) allocation d'une zone de type Elementfichier ouvert : = faux num : = 0 adrcaract : = nil caract : type des caract. longueur : longueur des articles longcaract : longueur de la zone des caract.
Fichiers : Interprétation Ouvrir(F, Flogique, Fphysique ) Si le fichier n'est pas ouvert : = vrai incrémenter le nombre de fichiers ouverts lui associer un fichier logique interne fi lien entre fi et fichier physique utilisateur SI mode ='N' ouverture de fi en écriture SI mode ='A' ouverture de fi en lecture/écriture Fsi
Fichiers : Interprétation Ouvrir(F, Flogique, Fphysique ) (Suite) SI fichier avec caractéristique SI mode='N' . réserver dans le fichier la zone pour les caractéristiques en recopiant des blancs . Allocation d'une zone contenant les adresses vers les caractéristiques . Adrcaract : = adresse de cette zone SINON { 'A' } S’il n’était pas ouvert : . Allocation d'une zone contenant les adresses vers les caractéristiques . Adrcaract : = adresse de cette zone . récupérer les caractéristiques ( Fichier ===> Mémoire ) FSI
Fichiers : Interprétation Fermer(F) Si le fichier n'est pas ouvert : erreur Sauvegarde des caractéristiques et libération de la zone mémoire réservée pour les caractéristiques. fermer le fichier interne associé Num : = 0 Ouvert : = faux; décrémenter le nombre de fichiers ouverts
Fichiers : Interprétation Ecrireseq(F, V), Ecriredir(F, V), Rajouter(F, V) Si le fichier n'est pas ouvert : erreur S'il s'agit d'une écriture directe, se positionner sur la position donnée si elle existe. S'il s'agit de rajouter, se positionner en fin de fichier Ecrire l'article dans le fichier
Fichiers : Interprétation Lireseq(F, V), Liredir(F, V, n) Si le fichier n'est pas ouvert : erreur S'il s'agit d'une lecture directe, se positionner sur la position donnée si elle existe. Lire l'article du fichier
Fichiers : Interprétation Aff_entete (F, i, Exp ) Si le fichier n'est pas ouvert : erreur Affecter l'expression scalaire Exp comme i-ème caractéristique. Entete( F, i ) : Si le fichier n'est pas ouvert : erreur Récupérer la i-ème caractéristique. Alloc_bloc (F) Si le fichier n'est pas ouvert : erreur Se positionner en fin de fichier et rendre cette position comme résultat de la fonction. Finfich (F) Si le fichier n'est pas ouvert : erreur Si la position est en fin de fichier, la fonction rend la valeur VRAI sinon FAUX.