• Nenhum resultado encontrado

La representation des termes

No documento pour obtenir le grade de (páginas 46-49)

Denition 2.13 Un domaine r est monotone (resp. anti-monotone ) ssi

3.1 La machine abstraite de Warren

3.1.4 La representation des termes

Les termes sont codes par de mots etiquetes comme dans la majorite des langages dynami- quement types (cf. [38] pour une etude complete de la codication des types dans de tels langages). La gure 3 schematise la representation interne de chaque terme, a savoir :

variable : la partie valeur est une reference vers le terme auquel est liee la variable.

Une variable libre est simplement representee comme une auto-reference (i.e. si est son adresse, son contenu est <REF, >). Notons que l'aectation d'un tel mot a un registre cree un lien du registre vers la variable. On appelle dereferenciation l'operation consistant a suivre un cha^nage de variables liees jusqu'a ce qu'une variable libre ou un terme dierent d'une variable soit rencontre.

constante : la partie valeur pointe dans une table de hash-code stockant toutes les cons- tantes, ramenant ainsi la comparaison de deux constantes a la comparaison de deux entiers.

entier : la partie valeur code l'entier.

liste vide : elle est simplement representee par la constante particuliere '[]'.

liste non vide : la partie valeur pointe une cellule du tas contenant le Car, la suivante contenant le Cdr.

structure : la partie valeur pointe une cellule du tas contenant le foncteur (une adresse dans la table de hash-code des constantes) et l'arite (nombre n de sous-termes).

Consecutivement a ce mot viennent les n mots etiquetes associes aux sous-termes.

Une des principales caracteristiques de la WAM est due au choix de representation des termes composes (i.e. listes, structures) par recopie de structure. En eet, un terme est traite dieremment suivant qu'il est decompose (acces a une instance deja existante) ou construit (creation d'une nouvelle instance a partir d'un modele). Pour une liaison en decomposition

la variable sera simplement liee a l'instance deja existante alors qu'en construction la variable est liee a une nouvelle copie du modele. La WAM denit ainsi deux modes lors de l'unication de termes structures :

READ : correspondant a une decomposition. Dans ce cas le terme existe dans le tas et un registre de base, nomme S, contient son adresse. L'unication des sous-termes peut avoir lieu par rapport a S.

WRITE : correspondant a une construction. Dans ce cas le terme est construit sur le sommet du tas (pointe parH).

Pour eviter l'utilisation d'un registre specique pour coder le mode le registre S est mis a

NULL en mode WRITE.

Argument Cdr Argument Car STC

LST

INT entier CST

REF structure

liste entier constante variable

Heap Argument n−1 : Argument 0 Foncteur / Arite

Table des constantes

Figure 3 : representation des termes dans la WAM

3.1.5 Registres

La WAM utilise les registres de base suivants :

PC (Program Counter) pointeur de programme.

CP (Continuation Program) pointeur de continuation.

E (Environment) pointeur sur environnement courant.

B (Backtrack) pointeur sur point de choix courant.

BC (Backtrack Cut) pointeur sur point de choix pour coupure.

H (Heap) pointeur sur sommet du heap.

S (Structure pointer) pointeur sur structure a decomposer.

TR (Trail) pointeur sur sommet de la trail.

A[i] (Arguments) banc de registres arguments (aussi nommeX[i]).

Le registre BC est une extension a la WAM permettant de prendre en compte la coupure (!/0). Nous ne detaillerons pas la gestion de la coupure du fait quewamcc traite celle-ci de maniere classique (cf. si besoin [3, 15]).

Les registres arguments (notes A[i]) servent d'interface pour les donnees entre l'appelant et l'appele. Ces registres sont charges par l'appelant et sont unies avec la t^ete de clause par l'appele, ce qui a pour eet de charger son environnement (les variables de la clause recoivent en eet leurs valeurs gr^ace a l'unication). Si celle-ci reussit, la clause est uti- lisable ; pour chacun des predicats du corps les registres sont charges avec les arguments appropries et le contr^ole est transfere au predicat concerne. S'il est possible de detecter les variables telles qu'entre leur premiere et leur derniere occurrence aucun appel a un predi- cat ne sera fait, alors celles-ci peuvent ^etre gerees directement dans les registres plut^ot que dans l'environnement. De telles variables sont qualiees de temporaires (notees X[i]) par opposition aux variables gerees au travers de l'environnement qui sont dites permanentes (notees Y[j]).

Denition 3.3 Une variabletemporaire est une variable n'apparaissant que dans un seul but, la t^ete et le premier but ne comptant que pour un.

Une variable est permanente si elle n'est pas temporaire.

Bien evidemment, il n'y a aucune dierence entre les registres A[i] et X[i] ; physique- ment ce sont les m^emes, nous les distinguerons uniquement pour bien preciser les concepts utilises. L'avantage des temporaires reside dans le fait que certaines instructions de char- gement et de recuperation d'arguments pourront donner lieu a des instructions de copie

(par exemple charger avec le contenu du registre ).

La gure 4 montre l'utilisation de la memoire dans la WAM.

CP Cont. Programme E Envir. Prec.

Y[0] Variable Perm.

:

Y[k] Variable Perm.

ALT Code Alternat.

CP Sauvegarde CP E Sauvegarde E B Pt choix prec.

BC Sauvegarde BC H Sauvegarde H TR Sauvegarde TR A[0] Sauvegarde A[0]

:

A[m] Sauvegarde A[m]

PC Pntr. Programme CP Cont. Programme E Environnement B Pt de Choix BC Pt de Choix Cut H Heap

S Pntr. Structure TR Trail

A[0] Argument : A[n] Argument

TRAIL HEAP PILE DE CONTROLE

Environnement

Point de Choix

(bas) (haut)

Point de Choix Environnement

Registres de Base

Figure 4 : architecture de la WAM

No documento pour obtenir le grade de (páginas 46-49)