28
Le langage Prolog Le langage Prolog Cours n°5 Grammaire et automates Grammaire et automates Jean-Michel Adam UFR SHS – IMSS – L2 MIASS

Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Embed Size (px)

Citation preview

Page 1: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Le langage PrologLe langage PrologCours n°5

Grammaire et automatesGrammaire et automates

Jean-Michel AdamUFR SHS – IMSS – L2 MIASS

Page 2: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Grammaires etGrammaires et Automates en langageAutomates en langage

PrologProlog

Page 3: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Représentation des textes par p pdes listes

En Prolog, un texte est représenté par une listede caractères"bonjour Marcel comment allez-vous"est la même chose que :[98, 111, 110, 106, 111, 117, 114, 32, 77, 97, 114, 99, 101, 108, 32, 99, 111, 109, 109, 101, 110, 116, 32, 97, 108, 108, 101, 122, 45, 118, 111, 117, 115]les caractères sont représentés par des entiers les chaînes sontles caractères sont représentés par des entiers, les chaînes sont des listes d’entiersd’atomes[bonjour, 'Marcel', comment, allez, vous][ a, b, a, a, c, a ]

Page 4: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Rappel : ppdéfinition d’une grammaire

Un langage est en général défini par une grammaireUne grammaire définit des règles de construction desUne grammaire définit des règles de construction des phrases du langage (texte).Une grammaire G est caractérisée par 4 composantsg p pG = < VT, VN, S, R >VT : vocabulaire terminalVT : vocabulaire terminal

C’est l’ensemble des symboles valables pour le langage (chaînes, termes possibles)

VN : vocabulaire non terminalN’a rien à voir avec le vocabulaire terminal, il représente les noms utilisés pour décrire les règles de construction dunoms utilisés pour décrire les règles de construction du langage

VN ∩ VT = ∅N T ∅

Page 5: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Rappel : ppdéfinition d’une grammaire G

G = < VT, VN, S, R >R est l’ensemble des règles de la grammaireS est l’axiome (la règle de démarrage deS est l axiome (la règle de démarrage de l’analyse)L dé d’ t t b t it dLe découpage d’un texte brut en une suite de symboles terminaux est appelé « analyse l i llexicale »La vérification, pour un texte donné, duLa vérification, pour un texte donné, du respect des règles de grammaire du langage est appelée « analyse syntaxique »est appelée « analyse syntaxique »

Page 6: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple de grammaire simplep g pS → SN SVS SN SVSN → NPSV → VT SNNP → Marie | PierreVT → regarde

s(L) : sn(L1) sv(L2) append(L1 L2 L)s(L) :- sn(L1), sv(L2), append(L1, L2, L).sn(L) :- np(L).sv(L) :- vt(L1), sn(L2), append(L1, L2, L).

([ ])np([pierre]).np([marie]).vt([regarde]).([ g ])

Démo

Page 7: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Utilisation de la grammairegs(L) :- sn(L1), sv(L2), append(L1, L2, L).

(L) (L)sn(L) :- np(L).sv(L) :- vt(L1), sn(L2), append(L1, L2, L).np([pierre]).np([marie]).vt([regarde]).

?- s([pierre, regarde, marie]).truetrue

?- s(X).X = [pierre regarde pierre] ;X = [pierre, regarde, pierre] ;X = [pierre, regarde, marie] ;X = [marie, regarde, pierre] ;X [ i d i ]X = [marie, regarde, marie].

A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par la grammaire (si le langage est fini)les phrases du langage décrit par la grammaire (si le langage est fini)

Page 8: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple de grammaire simpleExemple de grammaire simpleS → SN SVS SN SVSN → NPSV → Vt SNNP → Marie | PierreVt → regarde

s(L) :- append(L1, L2, L), sn(L1), sv(L2).( ) ( )sn(L) :- np(L).

sv(L) :- append(L1, L2, L), vt(L1), sn(L2).np([pierre]).p( p )np([marie]).vt([regarde]).

Ici on suppose L instanciée

Démo

Page 9: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple de grammaire simpleExemple de grammaire simpleS → SN SVS SN SVSN → NPSV → Vt SNNP → Marie | PierreVt → regarde

s(L1 L2) :- sn(L1 L3) sv(L3 L2)s(L1, L2) : sn(L1, L3), sv(L3, L2).sn(L1, L2) :- np(L1, L2).sv(L1, L2) :- v(L1, L3), sn(L3, L2).v([regarde|L] L)v([regarde|L], L).np([pierre|L], L).np([marie|L], L).

Démo

Page 10: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Grammaire DCG (Direct Clause (Grammar)

Prolog offre la possibilité d’utiliser une notation DCG :DCG :s(L1, L2) :- sn(L1, L3), sv(L3, L2).( , ) ( , ), ( , )peut s’écrire sous la forme :s --> sn, sv.En fait Prolog transforme cette forme en:En fait Prolog transforme cette forme en:s(L1, L2) :- sn(L1, L3), sv(L3, L2).( , ) ( , ), ( , )avant de l’interpréter.

Page 11: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Grammaire DCG (Direct Clause Grammar)Grammaire DCG (Direct Clause Grammar)

S → SN SVS SN SVSN → NPSV → Vt SNNP → Marie | PierreVt → regarde

s --> sn svs > sn, sv.sn --> np.sv --> v, sn.np --> [pierre].np --> [marie].v --> [regarde]v > [regarde].

Démo

Page 12: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

La notation DCG de PrologLa notation DCG de PrologLes symboles de prédicats et de fonctions, lesLes symboles de prédicats et de fonctions, les variables et les constantes obéissent à la syntaxe habituelle de Prolog.gLes symboles adjacents dans une partie droite de règle sont séparés par une virgule, comme pour les g p p g , plittéraux en partie droite d'une clauseLa flèche est le symbole "-->"La flèche est le symbole >Les terminaux sont écrits entre "[" et "]"La chaîne vide ε est représentée par "[]"La chaîne vide ε est représentée par [] .On peut insérer en partie droite des règles, des b t t l b l d l ibuts autres que les symboles de la grammaire ; dans ce cas, ils figurent entre "{" et "}".

Page 13: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Une grammaire DCG où chaque item lexical est introduit par une règle

s --> sn, sv. sn --> np.

sv --> vt, sn.sv > visv --> vi.np --> [paul].np --> [ils]np > [ils].vi --> [dort].vi --> [dorment].[ ]vt --> [ecoutent].

Des éléments complémentaires (attributs) permettent de prendre en compte des éléments contextuels

Page 14: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Une grammaire DCG où chaque item lexical est introduit par une règle

s --> sn(Nombre), sv(Nombre).(N b ) (N b )sn(Nombre) --> np(Nombre).

sv(Nombre) --> vt(Nombre), sn(_).sv(Nombre) > vi(Nombre)sv(Nombre) --> vi(Nombre).np(sing) --> [paul].np(plur) --> [ils]np(plur) > [ils].vi(sing) --> [dort].vi(plur) --> [dorment].(p ) [ ]vt(plur) --> [ecoutent].

Des éléments complémentaires (attributs) permettent de prendre en compte des éléments contextuels

Page 15: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Grammaire DCG où le lexique est d é l f d' b ddonné sous la forme d'une base de faits

s --> sn(Nombre), sv(Nombre).sn(Nombre) --> np(Nombre).sv(Nombre) --> vt(Nombre) sn( )sv(Nombre) > vt(Nombre), sn(_).sv(Nombre) --> vi(Nombre).np(Nombre) --> [Mot], {lexique(Mot, np, Nombre)}.i(N b ) > [M t] {l i (M t i N b )}vi(Nombre) --> [Mot], {lexique(Mot, vi, Nombre)}.

vt(Nombre) --> [Mot], {lexique(Mot, vt, Nombre)}.

lexique(paul, np, sing).lexique(ils, np, plur).lexique(dort vi sing)lexique(dort, vi, sing).lexique(dorment, vi, plur).lexique(ecoutent, vt, plur).

Page 16: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Une grammaire DCG où figurent des t i d i t l h î idnon terminaux produisant la chaîne vide

s --> sn, sv.sn --> det, n, optrel., , psn --> np.sv --> vt, sn.sv --> vi.

l i (t t d t)sv vi.optrel --> [].optrel --> [qui], sv.det --> [Mot], {lexique(Mot, det)}.

lexique(tout, det).lexique(un, det).lexique(etudiant, n).det > [Mot], {lexique(Mot, det)}.

n --> [Mot], {lexique(Mot, n)}.np --> [Mot], {lexique(Mot, np)}.vt --> [Mot] {lexique(Mot vt)}

lexique(programme, n).lexique(boucle, vi).lexique(ecrit, vt).vt > [Mot], {lexique(Mot, vt)}.

vi --> [Mot], {lexique(Mot, vi)}.q ( , )

Page 17: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Représentations des pAutomates

Un automate correspond à une grammaire de type 3On peut donc représenter cette grammaireOn peut donc représenter cette grammaire de la même manière que les autres grammairesSi l’automate est déterministe Prolog neSi l automate est déterministe, Prolog ne devrait pas faire de retours arrières

Page 18: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple d’automate déterministeS ⎯→ aAS ⎯→ bB

s --> [a], a.s --> [b], b.

A ⎯→ aCA ⎯→ bB

a --> [a], c.a --> [b], b.

B ⎯→ aAB ⎯→ bC

b --> [b], c.b --> [a], a.

C ⎯→ aCC ⎯→ bC

c --> [b], c.c --> [a], c. []c --> [].

But : s([a b a b b a] [])a

But : s([a, b, a, b, b, a],[]).S Aa

b

a

B Cb b

b

a, b

b

Page 19: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Autre programmation possibleS ⎯→ aA s([a|F]) :- a(F).

s([b|F]) :- b(F)S ⎯→ bBA ⎯→ aC

s([b|F]) :- b(F).a([a|F]) :- c(F).a([b|F]) :- b(F)

A ⎯→ bBB ⎯→ aA

a([b|F]) : b(F).b([b|F]) :- c(F).b([a|F]) :- a(F).

B ⎯→ bCC ⎯→ aC

b([a|F]) : a(F).c([a|F]) :- c(F).c([b|F]) :- c(F).

C ⎯→ bC([ | ]) ( )

c([]).

a

But : s([a, b, a, b, b, a]).S A

a

aa

B Cb

ab

a

a bC

b

a, b

Page 20: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Autre programmation possiblep g p

S aA [ ] 2S ⎯→ aAS ⎯→ bBA → aC

q1 --> [a], q2.q1 --> [b], q3.2 [ ] 4A ⎯→ aC

A ⎯→ bBB → aA

q2 --> [a], q4.q2 --> [b], q3.q3 > [a] q2B ⎯→ aA

B ⎯→ bCC → aC

q3 --> [a], q2.q3 --> [b], q4.q4 > [b] q4C ⎯→ aC

C ⎯→ bCq4 --> [b], q4.q4 --> [a], q4.q4 --> []q4 > [].

But : q1([a b a b b a] X)But : q1([a, b, a, b, b, a],X).X=[]

Page 21: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Automate non déterministe

1 > [ ] 2

4

q1 --> [a], q2.q1 --> [a], q3.q2 > [b] q42

1

q2 --> [b], q4.q2 --> [].q3 --> [b] q53 5

6

q3 --> [b], q5.q3 --> [].q4 --> [a] q26 q4 > [a], q2.q5 --> [b], q6.q6 --> [a], q3.q6 > [a], q3.

Page 22: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Usage desUsage des grammairesgrammaires

Pour la description d’un langage

Page 23: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple : un petit langage de programmationprogramme

lexiquelexique

entier fonction MAX(entier A,B)/* MAX(A B) désigne le MAX de A et de B */

algorithmeA := 20;B := 50;/* MAX(A,B) désigne le MAX de A et de B */

lexique de MAXti M

B := 50;tantque A != B faire

si MAX(A,B) = B entier M;

algorithme de MAXsi A < B alors M := B sinon M :=

alors B := B-1 sinon A := A-1 fsisi A < B alors M := B sinon M :=

MIN(A,B,MAX(U,V)) fsiretour(M)

fait

fprogrammeffonction

entier A,B;

p g

entier PGCD;

Page 24: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple : grammaire d’un petit p g plangage de programmationprogramme --> prog, le_lexique, l_algorithme, fprogramme, ff.

le lexique --> lexique liste declarationsle_lexique --> lexique, liste_declarations.

liste_declarations --> declaration, !, liste_declarations.liste declarations > []liste_declarations --> [].

declaration --> type_variable, fin_declaration.

fin_declaration --> identificateur, !, liste_idf, ptvirg.fin_declaration --> fonction, identificateur, liste_param_formels,

corps_fonction, ffonction.

type_variable --> entier ; reel; caractere ; booleen ; chaine.

liste_idf --> virg, !, identificateur, liste_idf.liste_idf --> [].

Page 25: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple : grammaire d’un petit p g plangage de programmationl_algorithme --> algorithme, liste_instructions.

liste instructions --> instruction, fliste instructions._ , _

fliste_instructions --> ptvirg, !, instruction, fliste_instructions.fliste_instructions --> [].

instruction --> affectation, !.instruction --> conditionnelle, !.instruction > iterationinstruction --> iteration.

affectation --> identificateur, affect, expression.affect --> deuxpts, egal.p , g

conditionnelle --> si, expression, alors, liste_instructions, sinon_opt, fsi.

iteration --> tantque, !, expression, faire, liste instructions, fait.iteration tantque, !, expression, faire, liste_instructions, fait.

sinon_opt --> sinon, ! , liste_instructions.sinon_opt --> [].

Page 26: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple : grammaire d’un petit p g plangage de programmationexpression --> expression2, fin_expression.

fin_expression --> op1, !, expression.op1 --> [‘<'], !, suit_inf.op1 --> ['>'], !, suit_sup.

fin_expression --> [].

expression2 --> operande, fin_experssion2.

op1 --> [‘='], !.op1 --> [‘!'], !, [‘='].

fin_experssion2 --> op2, !, expression2.fin_experssion2 --> [].

operande > signe opt primaire

suit_inf --> [‘='], !.suit_inf --> [].suit sup --> [‘='], !.operande --> signe_opt, primaire.

signe_opt --> op2,!.signe opt --> [].

suit_sup [ ], !.suit_sup --> [].

op2 > [‘+'] !signe_opt [].

primaire --> parouvr,!, expression, parferm.primaire --> constante, !.

op2 --> [ + ],!.op2 --> [‘-'].

primaire --> identificateur, !, liste_param_effectifs_opt.

liste_param_effectifs_opt --> parouvr, !, liste_expr, parferm. liste param effectifs opt > []liste_param_effectifs_opt --> [].

Page 27: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales

Exemple : grammaire d’un petit p g plangage de programmationliste_expr --> expression, !, fliste_expr. liste_expr --> [].

fliste_expr --> virg, !, expression, fliste_expr.fliste_expr --> [].

constante --> constante_bool, !.constante --> nombre.

constante_bool --> vrai,!.constante bool --> fauxconstante_bool --> faux.

Page 28: Le langage PrologLe langage Prolog - imss …imss-adamj/documents/Prolog-cours5.pdf · A partir de la grammaire, Prolog peut engendrer toutes les phrases du langage décrit par lales