Langages formels et analyse syntaxique
CM8 : Algorithme(s) Earley
Timothée Bernard 13 novembre 2020
Université de Paris
À lire
• Section 14.2,Algorithme d’Earley et ses variantes, du polycopié d’Yvon et Demaille (2016).
1
À lire
• Section 14.2,Algorithme d’Earley et ses variantes, du polycopié d’Yvon et Demaille (2016).
1
• 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
• 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
• 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
• 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
• 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
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
• 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•
A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
• 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• A→B1•B2B3B4
B2→α2•
A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3•
A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
• 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• A→B1•B2B3B4
B2→α2• A→B1B2•B3B4
B3→α3• A→B1B2B3•B4
• Un item correspond à une prise hypothèse : on va tenter de reconnaîtreAà partir de i.
3
Vocabulaire
• Item inactif :(A→α•,i,j).
• Item actif : item qui n’est pas inactif.
• Item initial :(A→ •α,i,j).
4
Vocabulaire
• Item inactif :(A→α•,i,j).
• Item actif : item qui n’est pas inactif.
• Item initial :(A→ •α,i,j).
4
Vocabulaire
• Item inactif :(A→α•,i,j).
• Item actif : item qui n’est pas inactif.
• Item initial :(A→ •α,i,j).
4
Vocabulaire
• Item inactif :(A→α•,i,j).
• Item actif : item qui n’est pas inactif.
• Item initial :(A→ •α,i,j).
4
Opération fondamentale :comp(complete)
Si on a(A→α1 • Bα2,i,j)et(B→β•,j,k), introduire (A→α1B • α2,i,k).
i j k
A→α1•Bα2 B→β• A→α1B•α2
5
Opération fondamentale :comp(complete)
Si on a(A→α1 • Bα2,i,j)et(B→β•,j,k), introduire (A→α1B • α2,i,k).
i j k
A→α1•Bα2 B→β• A→α1B•α2
5
Opération fondamentale :comp(complete)
Si on a(A→α1 • Bα2,i,j)et(B→β•,j,k), introduire (A→α1B • α2,i,k).
i j k
A→α1•Bα2 B→β•
A→α1B•α2
5
Opération fondamentale :comp(complete)
Si on a(A→α1 • Bα2,i,j)et(B→β•,j,k), introduire (A→α1B • α2,i,k).
i j k
A→α1•Bα2 B→β• A→α1B•α2
5
Autre opération importante :scan
Si on a(A→α1 • aα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
Autre opération importante :scan
Si on a(A→α1 • aα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
Autre opération importante :scan
Si on a(A→α1 • aα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
Autre opération importante :scan
Si on a(A→α1 • aα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
• competscanpermettent de faire progresser des items déjà créés.
• Comment introduit-on des items initiaux ?
• →Plusieurs versions de l’algorithme.
7
• competscanpermettent de faire progresser des items déjà créés.
• Comment introduit-on des items initiaux ?
• →Plusieurs versions de l’algorithme.
7
• competscanpermettent de faire progresser des items déjà créés.
• Comment introduit-on des items initiaux ?
• →Plusieurs versions de l’algorithme.
7
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
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
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
Première version
• Initialisation de la table avec tous les items initiaux possibles.
• Analyse de type ascendant.
9
Première version
• Initialisation de la table avec tous les items initiaux possibles.
• Analyse de type ascendant.
9
Première version
• Initialisation de la table avec tous les items initiaux possibles.
• Analyse de type ascendant.
9
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
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
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
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
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
Meilleure version
Nouvelle opération :pred
Si on a(A→α1 • Bα2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).
i j
A→α1 •Bα2
B→ •γ
12
Meilleure version
Nouvelle opération :pred
Si on a(A→α1 • Bα2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).
i j
A→α1 •Bα2
B→ •γ
12
Meilleure version
Nouvelle opération :pred
Si on a(A→α1 • Bα2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).
i j
A→α1 •Bα2
B→ •γ
12
Meilleure version
Nouvelle opération :pred
Si on a(A→α1 • Bα2,i,j)oùA∈N, introduire tous les (B→ •γ,j,j).
i j
A→α1 •Bα2
B→ •γ
12
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β1∈Nthen // pred?
for(β1→γ)∈Gdoadd(β1→ •γ,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
• 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
• 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
À 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
À 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
À 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
À 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
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