Warren's Abstract Machine
Un article de Wikipédia, l'encyclopédie libre.
Cet article fait partie de la série langages de programmation |
Langages à objets |
C++ - C# - D Eiffel - Groovy - Java Lisaac - Python - Ruby Simula - Smalltalk |
Langages impératifs |
APL - ASP - Assembleur BASIC - C - COBOL - Natural Forth - Fortran - Limbo - Logo Pascal - Perl - PHP - TCL Visual Basic - WLangage |
Langages fonctionnels |
Haskell - ML/OCaml Lisp/Common Lisp Scheme - XSLT |
Langages déclaratifs |
Clips - Prolog |
Langages concurrents |
Ada 95 - Erlang |
Voir aussi |
Conception - Codage Tests - Optimisations |
Cet article est une ébauche concernant l’informatique.
Vous pouvez partager vos connaissances en l’améliorant. (Comment ?).
|
La Warren's Abstract Machine (Machine abstraite de Warren) est une machine virtuelle permettant d'implémenter le langage Prolog. Cette machine est composée d'un jeu d'instructions spécial ainsi que d'une mémoire. Elle a été définie par David H. D. Warren en 1983. Elle est une des implémentations classiques pour prolog.
[modifier] Jeu d'instructions
Le jeu d'instructions de la WAM est composé de huit types d'instructions.
[modifier] Instructions Put
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions Get
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions Set
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions d'unification
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions de contrôle
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions de choix
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions d'index
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Instructions de coupure
Ces instructions permettent la gestion de la coupure de prolog (prédicat !/0).
Cette section est vide, pas assez détaillée ou incomplète. Votre aide est la bienvenue !
[modifier] Structure de la mémoire
La mémoire de la machine WAM est séparée en cinq parties (depuis le bas de la mémoire) :
- Un premier espace contient le code exécutable.
- Un deuxième espace contient un tas (heap) grandissant en direction du haut de la mémoire.
- Un troisième espace contient une pile (stack) grandissant en direction du haut de la mémoire. Cette pile contient en particulier les points de choix et les environnements.
- Un quatrième espace contient le trail grandissant en direction du haut de la mémoire.
- Un cinquième espace contient le pdl grandissant en direction du bas de la mémoire (depuis la plus haute adresse de la mémoire de la machine).
[modifier] Exemples
Soit le programme prolog suivant:
fille(anne). fille(clair). garcon(B) :- \+ fille(B).
Avec une implémentation basée sur la WAM, le code produit serait de la forme (en mini-assembleur WAM):
predicate(fille/1): switch_on_term(2,1,fail,fail,fail), label(1): switch_on_atom([(anne,3),(clair,5)]) label(2): try_me_else(4) label(3): get_atom(anne,0) proceed label(4): trust_me_else_fail label(5): get_atom(clair,0) proceed predicate(garcon/1): get_variable(x(1),0) put_structure(fille/1,0) unify_local_value(x(1)) execute((\+)/1))