Licence Informatique Année 2000-2001
Gnu Prolog est un Prolog disponible gratuitement utilisant la syntaxe d'
Edimbourg (celle ... Remarque : si vous avez à corriger votre programme sous
Emacs, il faut le ... Faire de même avec les programmes sur les listes abordés au
dernier TD. ... Modifier cet analyseur pour calculer le nombre de0, de 1, et de 2
que contient ...
part of the document
corriger votre programme sous Emacs, il faut le recharger par linstruction reconsult(menu). Elle permet deffacer le programme précédent au sein du système Prolog avant de charger les nouvelles règles.
Faire de même avec les programmes sur les listes abordés au dernier TD.
Pour terminer lexécution du programme Prolog, il suffit de taper linstruction ?-halt.
Les modes conversationnels :
Lorsque le système Prolog est lancé, il dialogue avec lutilisateur. Il existe deux modes conversationnels :
Le mode interrogation : dans ce mode, le système considère que ce que lutilisateur tape au clavier est une question. Toute question est une formule ou une conjonction de formules impérativement terminée par un point. Le système lit la question et y répond comme vous venez de le voir.
Le mode enregistrement : dans ce mode, le système considère que ce que lutilisateur tape au clavier constitue des faits et ou des règles quil doit enregistrer en tant que programme.
Lorsque le système est lancé, Prolog est normalement en mode interrogation. La manière de passer dun mode à lautre est dépendante du système et il vous faut consulter le manuel de GnuProlog (/net2/softs/gnu/gprolog-1.2.1/docs) pour la connaître. Cependant le mode interrogation est le plus important, car il est plus facile de taper les programmes en un seul bloc sous Emacs.
Travail sur les N-uplets : Les arbres syntaxiques
Exercice 1 :
Nous avons vu dans le chapitre sur les listes la manière de construire un analyseur associé à une grammaire. Nous allons maintenant introduire la notion d arbre syntaxique.
Considérons la grammaire :
G1 : {S ! c, S ! aSb}
Citez quelques mots du langage.
En déduire les arbres syntaxiques correspondants.
En déduire les n-uplets correspondants.
Ecrire un programme qui construit tous les arbres syntaxiques de la grammaire G1.
Tester le programme en lui de demandant de reconnaître si un arbre donné correspond à la grammaire G1 ou non.
Tester le programme pour générer des arbres syntaxiques (attention cest un processus infini). Que remarque-t-on en inversant lordre des règles ?
Reprendre les règles de lanalyseur associé à cette grammaire (ou les retrouver). Peut-on modifier ce programme de façon que lanalyseur construise larbre syntaxique dun mot, en même temps quil reconnaît ce mot.
Lorsquon construit un arbre syntaxique, la liste des feuilles constitue le mot dérivé par larbre. Ecrire un programme qui construit la liste des feuilles dun arbre en respectant les deux contraintes suivantes :
Vous vous limiterez aux arbres comportant au plus trois branches (ou fils). Vous coderez donc ces arbres au moyen des n-uplets , ou .
Le programme doit être capable de reconnaître des feuilles de nature très diverse : caractères, entiers, identificateurs, etc. Un moyen simple de parvenir à ce but est de coder les feuilles par le singleton .
Exercice 2 :
On se donne la grammaire :
: :=
: := 01
: :=01
: :=2
: :=2
Donnez des exemples de mot générés à partir de cette grammaire.
Ecrire lanalyseur associé à cette grammaire.
Modifier cet analyseur pour calculer le nombre de0, de 1, et de 2 que contient le nombre (on utilisera le terme plus-un(K, M) qui effectue le calcul M=K+1).