Bonjour,
Dans le cadre de mon DUT j'ai un projet en prolog à réaliser. Il s'agit d'un analyseur syntaxique qui renvoie si la requête est correcte . Notre fichier .pl marche correctement : par exemple ,
?- requete(robot,tournes,'à droite','s\'il te plait').
True.
La requete est correcte.

Ce programme fonctionne comme un automate c'est à dire que pour qu'une requête soit correcte il faut que chacun des mots ajouté à la liste L soit reconnu par chacun des états. ainsi par exemple dans l'état initial appelé 'requete', ce dernier peut reconnaître les mots 'tournes', 'avances'...
pour que la phrase entière soit reconnue, il faut que le dernier mot atteigne l'état final n°9, sinon ce sera false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
requete([tournes|L]):- etat9(L).
requete([avances|L]):- etat9(L).
requete([stop|L]):- etat9(L).
 
requete([avancer|L]):- etat2(L).
requete([avances|L]):- etat2(L).
requete([tourner|L]):- etat2(L).
requete([tournes|L]):- etat2(L).
requete([pivoter|L]):- etat2(L).
requete([pivotes|L]):- etat2(L).
requete([aller|L]):- etat2(L).
requete([va|L]):- etat2(L).
 
requete([machine|L]):- etat3(L).
requete([robot|L]):- etat3(L).
 
requete([je|L]):- etat4(L).
requete([nous|L]):- etat4(L).
 
etat2(['à gauche'|L]) :- etat9(L).
etat2(['à droite'|L]) :- etat9(L).
etat2([devant|L]) :- etat9(L).
 
etat2(['à gauche'|L]) :- etat8(L).
etat2(['à droite'|L]) :- etat8(L).
etat2([devant|L]) :- etat8(L).
 
etat3([avancer|L]) :- etat2(L).
etat3([avances|L]) :- etat2(L).
etat3([tourner|L]) :- etat2(L).
etat3([tournes|L]) :- etat2(L).
etat3([pivoter|L]) :- etat2(L).
etat3([pivotes|L]) :- etat2(L).
etat3([aller|L]) :- etat2(L).
etat3([va|L]) :- etat2(L).
 
etat4([te|L]) :- etat5(L).
 
etat5([demande|L]) :- etat6(L).
etat5([ordonne|L]) :- etat6(L).
 
etat6([de|L]) :- etat7(L).
 
etat7([tourner|L]) :- etat2(L).
etat7([avancer|L]) :- etat2(L).
etat7([pivoter|L]) :- etat2(L).
 
etat8(['s\'il te plait'|L]) :- etat9(L).
 
etat9([]):- write('operation réalisée avec succès').
Afin de finaliser ce projet, il nous est demandé de réaliser une boite de dialogue toute simple : il y aurait juste un champs de texte ou l'on taperait notre requête et un bouton "tester" qui teste à l'aide de notre fichier .pl si la requête est correcte ou non.

Nous avons entendu parler de l'interface XPCE cependant bien trop compliquée au premier abord.

Merci de votre aide,
Cordialement,