Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Suprieure dInformatique

  • Slides: 36
Download presentation
Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http: //zegour. esi. dz/ email:

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

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 ,

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’,

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,

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,

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,

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,

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,

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> ]

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 |

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 (

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> ) | ~

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,

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> {

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

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

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

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

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 à

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,

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

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é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

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

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

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’,

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

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 =

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

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 :

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'

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

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

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

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

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.