Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parTimothée Dumais Modifié depuis plus de 9 années
1
Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dzd_zegour@esi.dz
2
Fichiers : Introduction On définit une machine abstraite sur les fichiers permettant l’initiation aux structures simples de fichiers. 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 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.
3
Sémantique des fichiers : Quadruplés Déclaration de Fichier (Voir grammaire) 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 (‘Df’,A,B, C )
4
Sémantique des fichiers : Quadruplés Ouverture/Fermeture : OUVRIR(F, Fichier physique, Mode), FERMER(F) 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 A, B non utilisés C : pointeur dans TABOB vers l’objet fichier (‘Ouvrir’,A,B, C ) (‘Fermer’,A,B, C )
5
Sémantique des fichiers : Quadruplés Accès séquentiel: : LIRESEQ(F,Tampon), ECRIRESEQ(F, Tampon), RAJOUTER(F, Tampon) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon (‘Lireseq’,A,B, C ) (‘Ecrireseq’, A,B, C ) (‘Rajouter’,A,B, C )
6
Sémantique des fichiers : Quadruplés Accès direct : LIREDIR(F, Rang, Tampon), ECRIREDIR(F, Rang, Tampon) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon C : pointeur dans TABOB vers le rang A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le tampon C : pointeur dans TABOB vers le rang (‘Liredir’,A,B, C ) (‘Ecriredir’, A,B, C )
7
Sémantique des fichiers : Quadruplés Entête de fichier: : ENTETE(F, Rang), AFF_ENTETE(F, Rang, Exp) A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le rang C : pointeur dans TABOB vers le résultat A : pointeur dans TABOB vers l’objet fichier B : pointeur dans TABOB vers le rang C : pointeur dans TABOB vers le résultat à affecter (‘Entete’,A,B, C ) (‘Aff_entete’, A,B, C )
8
Sémantique des fichiers : Quadruplés Autre : FINFICH(F), ALLOC_BLOC(F) A : pointeur dans TABOB vers l’objet fichier B : non utilisé C : pointeur dans TABOB vers le résultat A : pointeur dans TABOB vers l’objet fichier B : non utilisé C : pointeur dans TABOB vers le résultat (‘Finfich’,A,B, C ) (‘Alloc_bloc’, A,B, C )
9
Fichiers : 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 un identificateur Opr dans {, >=, =, <> } Opa dans { +, -, Ou } Opm dans { *, /, Et } Sign dans {+, -} Tableau est synonyme de Vecteur Init_tableau est synonyme de Init_vecteur
10
Fichiers : 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}*
11
Fichiers : Déclarations Types | | | Machine_car | Machine_nombre | [Pointeur vers [Sep] ] Liste [ De ~Types | ~ | Tableau ( ) [De~ | Types~ ] | [Structure ](Types {, Types }*) [Structure ]( ~ Types | Vecteur(Cste) De Types ~ {, ~ Types | Vecteur(Cste) De Types ~ }*) Cste {, Cste}* Fichier De ~ Types | Vecteur(Cste) De ~Types | | ~ ~ Buffer [Entete] (Types {, types }*) |
12
Fichiers : Instructions { ; }* Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* ) | Tantque [ : ] Fintantque | Si [:] [Sinon ] Fsi | Pour Idf:=, [, ][:] Finpour | Appel Idf [(Exp {, }*)] |
13
Fichiers : Instructions ~Liberer| Allouer | ~ ( ) | ~ Aff_adr|Aff_val~ (, ) | ~ Creer_liste| Init_vecteur|Init_struct|Creer_mnombre ~ ( Idf, [[ ~ |[[ {, }*]] ~ {, ~ |[[ {, }*]]~}* ]] ) | Aff_element ( [[ {, }* ], ) | ~ Aff_struct | ~ (Idf, Cste, ) | Creer_mcar (Idf, [[ Chaine ]] ) | ~Lirecar|Lirenombre~ (Idf, Idf) | Fermer Ouvrir ((Idf, Chaine, Chaine) | Aff_entete
14
Fichiers : Instructions ~Lireseq|Ecrireseq|Rajouter~(Idf, Idf) | ~ Liredir | Ecriredir ~ (Idf, Cste, Idf)
15
Fichiers : Expressions [ Opr ] [Sign] { Opa }* {Opm }* Idf [(Exp {, }*)] | Cste | ( ) | | Nil Non | Vrai | Faux | Chaine ~Valeur|Suivant~ ( ) | Element ( [[ {, }* ]] ) | ~ Struct | ~ ( Idf, Cste) | ~Nbrcar|NbrNombre ~ (Idf) Entete Finfich|Alloc_bloc
16
Sémantique des fichiers : Fonctions sémantiques Fichier De ~ Types | Vecteur(Cste) De ~Types | | ~ ~ Buffer [Entete] (Types {, types }*) | Description Fx Fonctions sémantiques et Descriptions à trouver
17
Sémantique des fichiers : Fonctions sémantiques Fermer ( Idf ) Description Fx Fonctions sémantiques et Descriptions à trouver
18
Sémantique des fichiers : Fonctions sémantiques Ouvrir ((Idf, Chaine, Chaine) Description Fx Fonctions sémantiques et Descriptions à trouver
19
Sémantique des fichiers : Fonctions sémantiques Aff_entete (Idf, Cste, ) Description Fx Fonctions sémantiques et Descriptions à trouver
20
Sémantique des fichiers : Fonctions sémantiques ~Lireseq|Ecrireseq|Rajouter~(Idf, Idf) Description Fx Fonctions sémantiques et Descriptions à trouver
21
Sémantique des fichiers : Fonctions sémantiques ~ Liredir | Ecriredir ~ (Idf, Cste, Idf) Description Fx Fonctions sémantiques et Descriptions à trouver
22
Sémantique des fichiers : Fonctions sémantiques Entete ( Idf, Cste) Description Fx Fonctions sémantiques et Descriptions à trouver
23
Sémantique des fichiers : Fonctions sémantiques ~ Finfich|Alloc_bloc ~ ( Idf, Cste) Description Fx Fonctions sémantiques et Descriptions à trouver
24
Sémantique des fichiers : Exemple1 SOIT F1 UN FICHIER DE ( CHAINE, ENTIER ) ENTETE ( CHAINE, ENTIER ) BUFFER V1 ; S UNE CHAINE ; E, I :ENTIERS ; DEBUT OUVRIR ( F1, 'f1.pas', 'N' ) ; POUR I := 1, 3 LIRE ( S, E ) ; AFF_STRUCT ( V1, 1, S ) ; AFF_STRUCT ( V1, 2, E ) ; ECRIRESEQ ( F1, V1 ) ; FINPOUR ; AFF_ENTETE ( F1, 1, 'Z' ) ; AFF_ENTETE ( F1, 2, I - 1 ) ; FERMER ( F1 ) ; FIN
25
Sémantique des fichiers : Exemple1(suite) ‘L’180 ‘C’310 ‘L’241 312 313 314 ‘C’311 412 413 414 ‘X’915 ‘C’315 416 ‘X’316 0 1 2 TABOB 6 LONGZDD 3 Quadruplés générés ‘Df’021 ‘Ds’29 ‘Dc’3 ‘De’4 5 ‘Ouvrir’067 ‘Aff’58 ‘<=’5910 ‘B’10915 ‘Lire’01 ‘Aff_st’213 224 ‘Ecrse’11 ‘+E’585 ‘Br’7 ‘Aff-en’0112 1 2 3 TABTYP F(SE)*SEB 0 ‘SE’, ‘f1.pas’, ‘N’, ‘1’, ‘3’, ‘2’,’Z’ TABCONS 0 1 2 3 4 5 6 4 5 6 4 5 6 7 8 7 8 9 TABCOMP 4,5,6,7,8 0 2 1 10 11 12 13 9 10 11 14 15 12 13 ‘-E’5813 ‘Aff-en’0213 ‘Ferm’0 17 18 16
26
Sémantique des fichiers : Exemple2 SOIT F1 UN FICHIER DE ( CHAINE, ENTIER ) ENTETE ( CHAINE, ENTIER ) BUFFER V1 ; DEBUT OUVRIR ( F1, 'f1.pas', 'A' ) ; ECRIRE ( ENTETE ( F1, 1 ) ) ; ECRIRE ( ENTETE ( F1, 2 ) ) ; TQ NON FINFICH ( F1 ) LIRESEQ ( F1, V1 ) ; ECRIRE ( V1 ) FTQ ; FIN
27
Sémantique des fichiers : Exemple2 (suite) ‘L’180 ‘C’310 ‘L’241 ‘C’311 312 413 ‘Y’312 ‘C’414 ‘Y’413 ‘X’914 915 0 1 2 TABOB 5 LONGZDD 3 Quadruplés générés ‘Df’021 ‘Ds’29 ‘Ouvrir’034 ‘Entet’016 ‘Ecrire’01 ‘Entet’028 ‘Ecrire’11 ‘Finfic’09 ‘Non’910 ‘B’10 13 ‘Lirese’02 ‘Ecrire’21 ‘Br’7 1 2 3 TABTYP F(SE)*SEB 0 ‘SE’, ‘f1.pas’, ‘A’, ‘1’, ‘2’ TABCONS 0 1 2 3 4 4 5 6 4 5 6 7 8 7 8 9 TABCOMP 6 0 8 1 10 9 11 12 2 2
28
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 f1, f2, f3, f4 et F5. 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.
29
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;
30
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.
31
Fichiers : Interprétation Ouvrir(F, Flogique, Fphysique ) Si le fichier n'est pas ouvert 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
32
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
33
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
34
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
35
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
36
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.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.