#include
<stdio.h> Allocation dynamique (
malloc )
Allocation dynamique ( malloc
) ... |
Tous les paramètres sont passés par adresses : utilisation du symbole
* dans les paramètres formels et utilisation du
symbole & dans les paramètres réels.
Lors des appels, des variables
temporaires sont créées pour les expressions (_Px1,_Px2, etc. )
Des variables, des enregistrements ou des tableaux temporaires peuvent être générés par le traducteur.
Ils sont préfixées par le symbole
'_'.
Implémentation des types abstraits
Toutes les machines sont implémentées par les adresses.
Adresse vers la structure
Adresse vers le tableau
Adresse vers le bloc d'un fichier
Fichier
Le bloc d'en-tête se trouve au début du fichier.
Gestion spéciale des fichiers ouverts
_Empiler_ouvert: empile un fichier
ouvert (Nom et Handle)
_Depiler_ouvert: dépile le dernier
fichier ouvert(Nom) d'un handle donné.
_Ouvert : teste si un fichier de nom
donné existe ou pas.
Quand on définit un fichier, deux structures sont envisagées
- Définition de la structure du bloc du fichier avec des adresses. Si à
l'intérieur du bloc, il ya un tableau c'est
son adresse qui est considérée.
- Définition du bloc réel du fichier (sans adresse)
Nomination des opérations
Les noms des opérations des machines sont post fixés par les types.
Le langage Z permet le partage des fichiers, c'est à dire un même fichier peut être ouvert plusieurs fois. Selon le compilateur C utilisé, le partage de fichier peut ne pas être permis. Dans ce cas, une gestion spéciale des fichiers ouverts est intégrée dans la traduction.
Quelques optimisations restent à faire telles que le recouvrement des variables temporaires créées.