%%% %%% Version DCG de la grammaire avec construction %%% de structures %%% p(ph(SN,SV)) --> sn(SN), sv(SV). sn(snm(Det,N)) --> det(Det), n(N). sv(svb(vb(Mot))) --> v(vb(Mot)). sv(svb(vb(Mot),SN)) --> v(vb(Mot)), sn(SN). det(dt(le)) --> [le]. det(dt(la)) --> [la]. n(nm(souris)) --> [souris]. n(nm(chat)) --> [chat]. v(vb(mange)) --> [mange]. v(vb(trottine)) --> [trottine]. test(X) :- p(S,X,[]),pp(S),nl,fail. /*--------------- tests | ?- p(S,[le,chat,mange,la,souris],[]). S = ph(snm(dt(le),nm(chat)),svb(vb(mange),snm(dt(la),nm(souris)))) ; no | ?- test([le,chat,mange,la,souris]). ph(snm(dt(le), nm(chat)), svb(vb(mange), snm(dt(la), nm(souris)))) no | ?- test([la,chat,mange,le,souris]). ph(snm(dt(la), nm(chat)), svb(vb(mange), snm(dt(le), nm(souris)))) no | ?- test([le,chat,trottine,la,souris]). ph(snm(dt(le), nm(chat)), svb(vb(trottine), snm(dt(la), nm(souris)))) no | ?- test([le,chat,mange,le,chat]). ph(snm(dt(le), nm(chat)), svb(vb(mange), snm(dt(le), nm(chat)))) no | ?- test([le|X]). ph(snm(dt(le), nm(souris)), svb(vb(mange))) ph(snm(dt(le), nm(souris)), svb(vb(trottine))) ph(snm(dt(le), nm(souris)), svb(vb(mange), snm(dt(le), nm(souris)))) ... no --------------------- fin des tests */