• Aucun résultat trouvé

Langages formels et analyse syntaxique CM8 : Algorithme(s) Earley

N/A
N/A
Protected

Academic year: 2022

Partager "Langages formels et analyse syntaxique CM8 : Algorithme(s) Earley"

Copied!
55
0
0

Texte intégral

(1)

Langages formels et analyse syntaxique

CM8 : Algorithme(s) Earley

Timothée Bernard 13 novembre 2020

Université de Paris

(2)

À lire

• Section 14.2,Algorithme d’Earley et ses variantes, du polycopié d’Yvon et Demaille (2016).

1

(3)

À lire

• Section 14.2,Algorithme d’Earley et ses variantes, du polycopié d’Yvon et Demaille (2016).

1

(4)

• Un des premiers algorithmes capables de traiter efficacement n’importe quelle grammaire CF sans transformation.

• Pour CYK, les grammaires étaient en NCF. On pouvait alors se permettre de n’enregistrer que les constituants que l’on avait reconnus pour chaque span :A∈T[i,j+1]siA→ ui· · ·uj.

• Ici, on va enregistrer des règles pointées :(A→α•β)∈T[i,j+1] siα→ ui· · ·uj.

• Analyse réussie :(S→α•)∈T[0,n+1].

• On appelle une information de type(A→α• β,i,j), correspondant à(A→α β)∈T[i,j+1], unitem (Earley).

2

(5)

• Un des premiers algorithmes capables de traiter efficacement n’importe quelle grammaire CF sans transformation.

• Pour CYK, les grammaires étaient en NCF. On pouvait alors se permettre de n’enregistrer que les constituants que l’on avait reconnus pour chaque span :A∈T[i,j+1]siA→ ui· · ·uj.

• Ici, on va enregistrer des règles pointées :(A→α•β)∈T[i,j+1] siα→ ui· · ·uj.

• Analyse réussie :(S→α•)∈T[0,n+1].

• On appelle une information de type(A→α• β,i,j), correspondant à(A→α β)∈T[i,j+1], unitem (Earley).

2

(6)

• Un des premiers algorithmes capables de traiter efficacement n’importe quelle grammaire CF sans transformation.

• Pour CYK, les grammaires étaient en NCF. On pouvait alors se permettre de n’enregistrer que les constituants que l’on avait reconnus pour chaque span :A∈T[i,j+1]siA→ ui· · ·uj.

• Ici, on va enregistrer des règles pointées :(A→α•β)∈T[i,j+1]

siα→ ui· · ·uj.

• Analyse réussie :(S→α•)∈T[0,n+1].

• On appelle une information de type(A→α• β,i,j), correspondant à(A→α β)∈T[i,j+1], unitem (Earley).

2

(7)

• Un des premiers algorithmes capables de traiter efficacement n’importe quelle grammaire CF sans transformation.

• Pour CYK, les grammaires étaient en NCF. On pouvait alors se permettre de n’enregistrer que les constituants que l’on avait reconnus pour chaque span :A∈T[i,j+1]siA→ ui· · ·uj.

• Ici, on va enregistrer des règles pointées :(A→α•β)∈T[i,j+1]

siα→ ui· · ·uj.

• Analyse réussie :(S→α•)∈T[0,n+1].

• On appelle une information de type(A→α• β,i,j), correspondant à(A→α β)∈T[i,j+1], unitem (Earley).

2

(8)

• Un des premiers algorithmes capables de traiter efficacement n’importe quelle grammaire CF sans transformation.

• Pour CYK, les grammaires étaient en NCF. On pouvait alors se permettre de n’enregistrer que les constituants que l’on avait reconnus pour chaque span :A∈T[i,j+1]siA→ ui· · ·uj.

• Ici, on va enregistrer des règles pointées :(A→α•β)∈T[i,j+1]

siα→ ui· · ·uj.

• Analyse réussie :(S→α•)∈T[0,n+1].

• On appelle une information de type(A→α• β,i,j), correspondant à(A→α β)∈T[i,j+1], unitem (Earley).

2

(9)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(10)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4

B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(11)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1

AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

(12)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(13)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2

A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

(14)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(15)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3

AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

(16)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(17)

• L’utilisation de règles pointées permet de généraliser le système de CYK aux règles non-binaires.

i · · · k1 · · · k2 · · · k3 · · ·

A→ •B1B2B3B4 B1α1 AB1B2B3B4

B2α2 A→B1B2B3B4

B3α3 AB1B2B3B4

• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.

3

(18)

Vocabulaire

• Item inactif :(A→α•,i,j).

• Item actif : item qui n’est pas inactif.

• Item initial :(A→ •α,i,j).

4

(19)

Vocabulaire

• Item inactif :(A→α•,i,j).

• Item actif : item qui n’est pas inactif.

• Item initial :(A→ •α,i,j).

4

(20)

Vocabulaire

• Item inactif :(A→α•,i,j).

• Item actif : item qui n’est pas inactif.

• Item initial :(A→ •α,i,j).

4

(21)

Vocabulaire

• Item inactif :(A→α•,i,j).

• Item actif : item qui n’est pas inactif.

• Item initial :(A→ •α,i,j).

4

(22)

Opération fondamentale :comp(complete)

Si on a(A→α1 2,i,j)et(B→β•,j,k), introduire (A→α1B α2,i,k).

i j k

Aα1Bα2 Bβ Aα1Bα2

5

(23)

Opération fondamentale :comp(complete)

Si on a(A→α1 2,i,j)et(B→β•,j,k), introduire (A→α1B α2,i,k).

i j k

Aα1Bα2 Bβ Aα1Bα2

5

(24)

Opération fondamentale :comp(complete)

Si on a(A→α1 2,i,j)et(B→β•,j,k), introduire (A→α1B α2,i,k).

i j k

Aα1Bα2 Bβ

Aα1Bα2

5

(25)

Opération fondamentale :comp(complete)

Si on a(A→α1 2,i,j)et(B→β•,j,k), introduire (A→α1B α2,i,k).

i j k

Aα1Bα2 Bβ Aα1Bα2

5

(26)

Autre opération importante :scan

Si on a(A→α1 2,i,j)et queuj+1=a, introduire (A→α1a α2,i,j+1).

i j j+1

Aα1 aα2 Aα1aα2

6

(27)

Autre opération importante :scan

Si on a(A→α1 2,i,j)et queuj+1=a, introduire (A→α1a α2,i,j+1).

i j j+1

Aα1 aα2 Aα1aα2

6

(28)

Autre opération importante :scan

Si on a(A→α1 2,i,j)et queuj+1=a, introduire (A→α1a α2,i,j+1).

i j j+1

Aα1 aα2

Aα1aα2

6

(29)

Autre opération importante :scan

Si on a(A→α1 2,i,j)et queuj+1=a, introduire (A→α1a α2,i,j+1).

i j j+1

Aα1 aα2 Aα1aα2

6

(30)

competscanpermettent de faire progresser des items déjà créés.

• Comment introduit-on des items initiaux ?

Plusieurs versions de l’algorithme.

7

(31)

competscanpermettent de faire progresser des items déjà créés.

• Comment introduit-on des items initiaux ?

Plusieurs versions de l’algorithme.

7

(32)

competscanpermettent de faire progresser des items déjà créés.

• Comment introduit-on des items initiaux ?

Plusieurs versions de l’algorithme.

7

(33)

Conventions : mise en mémoire des items, notations, etc.

• Mot à analyser :u=u1· · ·un.

• Nous allons utiliser un tableau unidimensionnelT(indicé de 0 à n) contenant desensembles ordonnésde paires (règle pointée, indice) tel que(A→α• β,i)∈T[j]siα→ ui+1· · ·uj.(différent du polycopié)

8

(34)

Conventions : mise en mémoire des items, notations, etc.

• Mot à analyser :u=u1· · ·un.

• Nous allons utiliser un tableau unidimensionnelT(indicé de 0 à n) contenant desensembles ordonnésde paires (règle pointée, indice) tel que(A→α• β,i)∈T[j]siα→ ui+1· · ·uj.(différent du polycopié)

8

(35)

Conventions : mise en mémoire des items, notations, etc.

• Mot à analyser :u=u1· · ·un.

• Nous allons utiliser un tableau unidimensionnelT(indicé de 0 à n) contenant desensembles ordonnésde paires (règle pointée, indice) tel que(A→α• β,i)∈T[j]siα→ ui+1· · ·uj.(différent du polycopié)

8

(36)

Première version

• Initialisation de la table avec tous les items initiaux possibles.

• Analyse de type ascendant.

9

(37)

Première version

• Initialisation de la table avec tous les items initiaux possibles.

• Analyse de type ascendant.

9

(38)

Première version

• Initialisation de la table avec tous les items initiaux possibles.

• Analyse de type ascendant.

9

(39)

Première version

Algorithm 1 :Analyse syntaxique Earley simple Functionearley-simple(u)

// Initialisation fori:=0to|u|do

T[i] ={};

for(Aα)Gdoadd(A→ •α,i)toT[i]; forj:=0to|u|do

for(Aαβ,i)T[j]do ifβ=ϵthen

// comp?

for(AαAβ,i)T[i]do add(AαAβ,i)toT[j];

else ifβ1Σand j<|u|then β1β=β;

// scan?

ifuj+1=β1thenadd(Aα β1β,i)toT[j+1]; ifαs.t.(Sα,0)T[|u|]then returntrue;

else returnfalse;

10

(40)

Meilleure version

• Version « Earley ».

• On n’introduit au départ que les items initiaux(S→ •α,0,0) mais on ajoute une opérationpred(predict) servant à

introduire les items initiaux pouvant faire avancer les items que l’on rencontre.

• Méthode hybride ascendante-descendante.

11

(41)

Meilleure version

• Version « Earley ».

• On n’introduit au départ que les items initiaux(S→ •α,0,0) mais on ajoute une opérationpred(predict) servant à

introduire les items initiaux pouvant faire avancer les items que l’on rencontre.

• Méthode hybride ascendante-descendante.

11

(42)

Meilleure version

• Version « Earley ».

• On n’introduit au départ que les items initiaux(S→ •α,0,0) mais on ajoute une opérationpred(predict) servant à

introduire les items initiaux pouvant faire avancer les items que l’on rencontre.

• Méthode hybride ascendante-descendante.

11

(43)

Meilleure version

• Version « Earley ».

• On n’introduit au départ que les items initiaux(S→ •α,0,0) mais on ajoute une opérationpred(predict) servant à

introduire les items initiaux pouvant faire avancer les items que l’on rencontre.

• Méthode hybride ascendante-descendante.

11

(44)

Meilleure version

Nouvelle opération :pred

Si on a(A→α1 2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).

i j

Aα1 Bα2

B→ •γ

12

(45)

Meilleure version

Nouvelle opération :pred

Si on a(A→α1 2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).

i j

Aα1 Bα2

B→ •γ

12

(46)

Meilleure version

Nouvelle opération :pred

Si on a(A→α1 2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).

i j

Aα1 Bα2

B→ •γ

12

(47)

Meilleure version

Nouvelle opération :pred

Si on a(A→α1 2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).

i j

Aα1 Bα2

B→ •γ

12

(48)

Meilleure version

Algorithm 2 :Analyse syntaxique Earley Functionearley(u)

// Initialisation fori:=0to|u|doT[i] ={};

for(Sα)Gdoadd(S→ •α,0)toT[0];

forj:=0to|u|do

for(Aαβ,i)T[j]do ifβ=ϵthen

// comp?

for(AαAβ,i)T[i]do add(AαAβ,i)toT[j];

else ifβ1Nthen // pred?

for1γ)Gdoadd1→ •γ,j)toT[j];

else ifj<|u|then β1β=β; // scan?

ifuj+1=β1thenadd(Aα β1β,i)toT[j+1];

ifαs.t.(Sα,0)T[|u|]then returntrue;

else returnfalse;

13

(49)

• Quelque soit la version, on a une complexité dans le pire des cas en 0(n3)(n est la longueur du mot).

• En pratique (càd avec des grammaires usuelles et sur des entrées usuelles) alors on observe souvent beaucoup mieux — linéaire ou presque.

14

(50)

• Quelque soit la version, on a une complexité dans le pire des cas en 0(n3)(n est la longueur du mot).

• En pratique (càd avec des grammaires usuelles et sur des entrées usuelles) alors on observe souvent beaucoup mieux — linéaire ou presque.

14

(51)

À propos du polycopié

• Le texte dans le polycopié n’est pas très formel mais contient des illustrations.

• Vous pouvez ignorer la notion d’agenda quand vous la rencontrerez.

• Vous pouvez ignorer la section 14.2.4,Coin gauche.

15

(52)

À propos du polycopié

• Le texte dans le polycopié n’est pas très formel mais contient des illustrations.

• Vous pouvez ignorer la notion d’agenda quand vous la rencontrerez.

• Vous pouvez ignorer la section 14.2.4,Coin gauche.

15

(53)

À propos du polycopié

• Le texte dans le polycopié n’est pas très formel mais contient des illustrations.

• Vous pouvez ignorer la notion d’agenda quand vous la rencontrerez.

• Vous pouvez ignorer la section 14.2.4,Coin gauche.

15

(54)

À propos du polycopié

• Le texte dans le polycopié n’est pas très formel mais contient des illustrations.

• Vous pouvez ignorer la notion d’agenda quand vous la rencontrerez.

• Vous pouvez ignorer la section 14.2.4,Coin gauche.

15

(55)

Références i

Références

Yvon, François et Akim Demaille (2016). « Théories des langages ».

notes de cours. URL :

https://www.lrde.epita.fr/~akim/thl/lecture- notes/theorie-des-langages-2.pdf.

16

Références

Documents relatifs

Remarque : on peut toutefois montrer qu’une grammaire donnée est ambiguë en donnant un mot engendré par cette grammaire admettant deux arbres de dérivations distincts.....

• En section 4.4 L’automate canonique, vous pouvez vous concentrer sur l’algorithme de minimisation (en 4.4.3 ; nécessite de connaître aussi la définition de

• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.. • Algorithme en deux

Acceptation par état final : un peu comme pour les automates finis, on accepte si on se retrouve dans un état final après avoir lu tout le mot, et ce quelque soit le contenu de

• On suppose une capacité de mémoire infinie afin de pouvoir étudier la régularité (au sens usuel) des phénomènes syntaxiques et rendre la notion de structure syntaxique

• si ce n’est pas possible (parce qu’il s’agit d’un terminal ou parce que les différentes réécritures ne mènent à rien), c’est que la branche n’est pas viable.. •

À chaque étape, soit on sait qu’il faut s’arrêter (réussite ou échec), soit on sait quelle action effectuer pour continuer

- Nous avons vu qu’un langage est un ensemble de mots où un mot est une chaîne de symboles (caractères) d’un alphabet fini.. - Pour les langages réguliers (par exemple, le langage