• Les cellules(i,i+1)se remplissent en utilisant les règles lexicales (A→a).
• Sinon, on aA∈T[i,j]ssi∃(A→B C)∈G,∃k∈Ji+1,j−1K, B∈T[i,k],C∈T[k,j].
i · · · k · · · j
A→B C
B→... C→...
11
Remplir la table
• Les cellules(i,i+1)se remplissent en utilisant les règles lexicales (A→a).
• Sinon, on aA∈T[i,j]ssi∃(A→B C)∈G,∃k∈Ji+1,j−1K, B∈T[i,k],C∈T[k,j].
i · · · k · · · j
A→B C
B→... C→...
11
Remplir la table
• Les cellules(i,i+1)se remplissent en utilisant les règles lexicales (A→a).
• Sinon, on aA∈T[i,j]ssi∃(A→B C)∈G,∃k∈Ji+1,j−1K, B∈T[i,k],C∈T[k,j].
i · · · k · · · j
A→B C
B→... C→...
11
Remplir la table
• Les cellules(i,i+1)se remplissent en utilisant les règles lexicales (A→a).
• Sinon, on aA∈T[i,j]ssi∃(A→B C)∈G,∃k∈Ji+1,j−1K, B∈T[i,k],C∈T[k,j].
i · · · k · · · j
A→B C
B→... C→...
11
Remplir la table
i i+1 · · · k · · · j−1 j
A→B C
B→...
C→...
12
Remplir la table
i i+1 · · · k · · · j−1 j
A→B C
B→...
C→...
12
Remplir la table
i i+1 · · · k · · · j−1 j
A→B C
B→... C→...
12
Remplir la table
i i+1 · · · k · · · j−1 j
A→B C B→...
C→...
12
Remplir la table
i i+1 · · · k · · · j−1 j
A→B C B→...
C→...
12
Remplir la table
j A C
C C C C
j-1
B
...
B
k
B
...
B
i+1 B
i i+1 ... k ... j-1
13
Remplir la table
j A
C
C
C C C
j-1
B
...
B
k
B
... B i+1
B
i i+1 ... k ... j-1
13
Remplir la table
j A
C C
C
C C
j-1
B
...
B
k B
...
B
i+1
B
i i+1 ... k ... j-1
13
Remplir la table
j A
C C C
C
C
j-1
B
... B k
B
...
B
i+1
B
i i+1 ... k ... j-1
13
Remplir la table
j A
C C C C
C j-1 B
...
B
k
B
...
B
i+1
B
i i+1 ... k ... j-1
13
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.
Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
Remplir la table
• On peut remplir une cellule(i,j)ssi on a déjà rempli le dessous de sa colonne (jusque(i,i+1)) et la droite de sa ligne (jusque (j−1,j)).
• Plusieurs ordres possibles :
• en diagonale (de la plus grande vers la plus petite) ;
• par ligne (de droite à gauche, des lignes du bas vers le haut) ;
• par colonne (de bas en haut, des colonnes de la droite vers la gauche).
• Dans le polycopié : en diagonale.Bon exercice : modifier l’algorithme pour effectuer un remplissage par ligne, ou par colonne.
• Réussite :S∈T[1,n+1].
• Complexité :O(n3).
14
• Pour être capable de facilement reconstruire les arbres
syntaxiques, il faut stocker pour chaqueA∈T[i,j](avecj>i+1) les origines possibles de ce constituant :
∀(A→B C)∈G,k∈Ji+1,j−1K,B∈T[i,k],C∈T[k,j], (B,k,C)∈T′[i,j,A].
• On peut alors lister les analyses en un coût linéaire en le nombre de celles-ci (potentiellement exponentiel en la longueur de la phrase).
• Vous pouvez ignorer la section 14.1.4,Du test d’appartenance à l’analyse.Bon exercice : modifier l’algorithme afin de construire la tableT′en même temps queT, puis écrire l’algorithme listant toutes les analyses.
15
• Pour être capable de facilement reconstruire les arbres
syntaxiques, il faut stocker pour chaqueA∈T[i,j](avecj>i+1) les origines possibles de ce constituant :
∀(A→B C)∈G,k∈Ji+1,j−1K,B∈T[i,k],C∈T[k,j], (B,k,C)∈T′[i,j,A].
• On peut alors lister les analyses en un coût linéaire en le nombre de celles-ci (potentiellement exponentiel en la longueur de la phrase).
• Vous pouvez ignorer la section 14.1.4,Du test d’appartenance à l’analyse.Bon exercice : modifier l’algorithme afin de construire la tableT′en même temps queT, puis écrire l’algorithme listant toutes les analyses.
15
• Pour être capable de facilement reconstruire les arbres
syntaxiques, il faut stocker pour chaqueA∈T[i,j](avecj>i+1) les origines possibles de ce constituant :
∀(A→B C)∈G,k∈Ji+1,j−1K,B∈T[i,k],C∈T[k,j], (B,k,C)∈T′[i,j,A].
• On peut alors lister les analyses en un coût linéaire en le nombre de celles-ci (potentiellement exponentiel en la longueur de la phrase).
• Vous pouvez ignorer la section 14.1.4,Du test d’appartenance à l’analyse.Bon exercice : modifier l’algorithme afin de construire la tableT′en même temps queT, puis écrire l’algorithme listant toutes les analyses.
15
• Pour être capable de facilement reconstruire les arbres
syntaxiques, il faut stocker pour chaqueA∈T[i,j](avecj>i+1) les origines possibles de ce constituant :
∀(A→B C)∈G,k∈Ji+1,j−1K,B∈T[i,k],C∈T[k,j], (B,k,C)∈T′[i,j,A].
• On peut alors lister les analyses en un coût linéaire en le nombre de celles-ci (potentiellement exponentiel en la longueur de la phrase).
• Vous pouvez ignorer la section 14.1.4,Du test d’appartenance à l’analyse.
Bon exercice : modifier l’algorithme afin de construire la tableT′en même temps queT, puis écrire l’algorithme listant toutes les analyses.
15
• Pour être capable de facilement reconstruire les arbres
syntaxiques, il faut stocker pour chaqueA∈T[i,j](avecj>i+1) les origines possibles de ce constituant :
∀(A→B C)∈G,k∈Ji+1,j−1K,B∈T[i,k],C∈T[k,j], (B,k,C)∈T′[i,j,A].
• On peut alors lister les analyses en un coût linéaire en le nombre de celles-ci (potentiellement exponentiel en la longueur de la phrase).
• Vous pouvez ignorer la section 14.1.4,Du test d’appartenance à l’analyse.Bon exercice : modifier l’algorithme afin de construire la tableT′en même temps queT, puis écrire l’algorithme listant toutes les analyses.
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