Langages formels et analyse syntaxique
CM2 : Les grammaires hors-contexte et leurs transformations
Timothée Bernard 25 septembre 2020
Université de Paris
Grammaires hors-contexte
(« algébriques », « CFG »)
À lire
• Chapitre 6 du polycopié d’Yvon et Demaille (2016).
À lire
• Chapitre 6 du polycopié d’Yvon et Demaille (2016).
1
Grammaire hors-contexte (oualgébrique; type 2)
• N: symboles non-terminaux.
• Σ: symboles terminaux (alphabet/vocabulaire).
• P: règles de réécriture∈N×(N∪Σ)⋆.
• S: symbole initial/axiome∈N.
Exemple
• N:{S}.
• Σ:{a,b}.
• P:{S→aSb, S→ϵ}.
• axiome :S L={anbn|n∈N}
Grammaire hors-contexte (oualgébrique; type 2)
• N: symboles non-terminaux.
• Σ: symboles terminaux (alphabet/vocabulaire).
• P: règles de réécriture∈N×(N∪Σ)⋆.
• S: symbole initial/axiome∈N.
Exemple
• N:{S}.
• Σ:{a,b}.
• P:{S→aSb, S→ϵ}.
• axiome :S L={anbn|n∈N}
2
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
3
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
3
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
Exemple
• N:{Int}.
• Σ:{0,1, ...,9,+,−}.
• P:Int→Int+Int|Int−Int|0|1|...|9.
• axiome :Int
Int Int
9 + Int
Int 4 - Int
2
Int Int
Int 9 + Int
4 - Int
2
Figure 1 –Deux arbres de dérivations pour « 2 - 4 + 9 ».
3
• Deux grammaires sont faiblement équivalentes si elles génèrent le même langage (mais pas forcément les mêmes arbres de dérivations).
Lemme de pompage (hors-contexte)
SiLest un langage CF, alors il existe un entierktel que tout mot de Lde longueur supérieure àkse décompose en cinq facteurs u,v,w,x,y, avecvx̸=ϵ,|vwx|<ket tels que pour toutn∈N, uvnwxnyest également dansL.
Soit le langage est fini, soit on peut faire des « boucles ».
• Il existe unA∈Ntel queS→∗ uAy,
• A→∗ vAx(avecv̸=ϵoux̸=ϵ),
• etA→∗ w.
5
Lemme de pompage (hors-contexte)
SiLest un langage CF, alors il existe un entierktel que tout mot de Lde longueur supérieure àkse décompose en cinq facteurs u,v,w,x,y, avecvx̸=ϵ,|vwx|<ket tels que pour toutn∈N, uvnwxnyest également dansL.
Soit le langage est fini, soit on peut faire des « boucles ».
• Il existe unA∈Ntel queS→∗ uAy,
• A→∗ vAx(avecv̸=ϵoux̸=ϵ),
• etA→∗ w.
Lemme de pompage (hors-contexte)
SiLest un langage CF, alors il existe un entierktel que tout mot de Lde longueur supérieure àkse décompose en cinq facteurs u,v,w,x,y, avecvx̸=ϵ,|vwx|<ket tels que pour toutn∈N, uvnwxnyest également dansL.
Soit le langage est fini, soit on peut faire des « boucles ».
• Il existe unA∈Ntel queS→∗ uAy,
• A→∗ vAx(avecv̸=ϵoux̸=ϵ),
• etA→∗ w.
5
Lemme de pompage (hors-contexte)
SiLest un langage CF, alors il existe un entierktel que tout mot de Lde longueur supérieure àkse décompose en cinq facteurs u,v,w,x,y, avecvx̸=ϵ,|vwx|<ket tels que pour toutn∈N, uvnwxnyest également dansL.
Soit le langage est fini, soit on peut faire des « boucles ».
• Il existe unA∈Ntel queS→∗ uAy,
• A→∗ vAx(avecv̸=ϵoux̸=ϵ),
• etA→∗ w.
Lemme de pompage (hors-contexte)
SiLest un langage CF, alors il existe un entierktel que tout mot de Lde longueur supérieure àkse décompose en cinq facteurs u,v,w,x,y, avecvx̸=ϵ,|vwx|<ket tels que pour toutn∈N, uvnwxnyest également dansL.
Soit le langage est fini, soit on peut faire des « boucles ».
• Il existe unA∈Ntel queS→∗ uAy,
• A→∗ vAx(avecv̸=ϵoux̸=ϵ),
• etA→∗ w.
5
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
6
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
6
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF.
SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF.
SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
6
Propriétés de clôture
SiL1etL2sont deux langages CF :
• L1∪L2est aussi un langage CF ;
• L1L2est aussi un langage CF ;
• L1∗est aussi un langage CF ;
• L1∩L2n’est pas toujoursun langage CF.
SiL1est CF etL2est régulier :
• L1∩L2est un langage CF.
• Dans le polycopié, vous pouvez ignorer :
• la section 6.1.2Une grammaire pour le shell;
• la section 6.3.3Problèmes décidables et indécidables.
• Mais vous devez lire tout le reste...
7
• Dans le polycopié, vous pouvez ignorer :
• la section 6.1.2Une grammaire pour le shell;
• la section 6.3.3Problèmes décidables et indécidables.
• Mais vous devez lire tout le reste...
• Dans le polycopié, vous pouvez ignorer :
• la section 6.1.2Une grammaire pour le shell;
• la section 6.3.3Problèmes décidables et indécidables.
• Mais vous devez lire tout le reste...
7
• Dans le polycopié, vous pouvez ignorer :
• la section 6.1.2Une grammaire pour le shell;
• la section 6.3.3Problèmes décidables et indécidables.
• Mais vous devez lire tout le reste...
Normalisation des grammaires CF
À lire
• Chapitre 9 du polycopié d’Yvon et Demaille (2016).
À lire
• Chapitre 9 du polycopié d’Yvon et Demaille (2016).
8
• Nous allons étudier des algorithmes de transformation de grammaire.
• Ils n’affectent pas le langage généré, mais rendent la grammaire plus facile à manipuler pour les algorithmes d’analyses
syntaxiques que nous verrons bientôt (ainsi que pour obtenir certains résultats théoriques).
• Nous allons étudier des algorithmes de transformation de grammaire.
• Ils n’affectent pas le langage généré, mais rendent la grammaire plus facile à manipuler pour les algorithmes d’analyses
syntaxiques que nous verrons bientôt (ainsi que pour obtenir certains résultats théoriques).
9
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs. 2. On supprime les symboles non-dérivables.
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs. 2. On supprime les symboles non-dérivables.
10
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs. 2. On supprime les symboles non-dérivables.
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs. 2. On supprime les symboles non-dérivables.
10
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs. 2. On supprime les symboles non-dérivables.
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs.
2. On supprime les symboles non-dérivables.
10
Suppression des symboles inutiles
• Règle (« production ») utile : on peut dériver un mot en faisant intervenir cette règle.
• Non-terminal utile : on peut dériver un mot en faisant intervenir ce symbole.
• Un non-terminal utile est la partie gauche d’une règle utile.
• On peut supprimer les productions et symboles inutiles sans affecter le langage généré.
• Algorithme en deux temps :
1. On supprime les symboles non-productifs.
2. On supprime les symboles non-dérivables.
• Pour détecter les symboles non-productifs (qui ne se réécrivent pas, où à partir desquels on ne peut pas dériver de suites de terminaux seulement – il reste toujours au moins un
non-terminal) :
• en pratique on vous demande simplement de regarder la grammaire et d’indiquer pour chaque symbole s’il est productif (avec un exemple de suite de terminaux engendrée) ou non.
• Pour déterminer l’ensembleNUdes non-terminaux atteignables : NU=[S]
i=0
tant quei<len(NU) : X=NU[i]
pour tout(X→α)∈P:
pour toutY∈Napparaissant dansα: siY∈/ NU:NU.append(Y)
i+ =1
11
• Pour détecter les symboles non-productifs (qui ne se réécrivent pas, où à partir desquels on ne peut pas dériver de suites de terminaux seulement – il reste toujours au moins un
non-terminal) :
• en pratique on vous demande simplement de regarder la grammaire et d’indiquer pour chaque symbole s’il est productif (avec un exemple de suite de terminaux engendrée) ou non.
• Pour déterminer l’ensembleNUdes non-terminaux atteignables : NU=[S]
i=0
tant quei<len(NU) : X=NU[i]
pour tout(X→α)∈P:
pour toutY∈Napparaissant dansα: siY∈/ NU:NU.append(Y)
i+ =1
• Pour détecter les symboles non-productifs (qui ne se réécrivent pas, où à partir desquels on ne peut pas dériver de suites de terminaux seulement – il reste toujours au moins un
non-terminal) :
• en pratique on vous demande simplement de regarder la grammaire et d’indiquer pour chaque symbole s’il est productif (avec un exemple de suite de terminaux engendrée) ou non.
• Pour déterminer l’ensembleNUdes non-terminaux atteignables :
NU=[S] i=0
tant quei<len(NU) : X=NU[i]
pour tout(X→α)∈P:
pour toutY∈Napparaissant dansα: siY∈/ NU:NU.append(Y)
i+ =1
11
• Pour détecter les symboles non-productifs (qui ne se réécrivent pas, où à partir desquels on ne peut pas dériver de suites de terminaux seulement – il reste toujours au moins un
non-terminal) :
• en pratique on vous demande simplement de regarder la grammaire et d’indiquer pour chaque symbole s’il est productif (avec un exemple de suite de terminaux engendrée) ou non.
• Pour déterminer l’ensembleNUdes non-terminaux atteignables : NU=[S]
i=0
tant quei<len(NU) : X=NU[i]
pour tout(X→α)∈P:
pour toutY∈Napparaissant dansα:
Suppression des règles singulières
• Règle singulière (« non générative ») :A→BoùB∈N.
• Algorithme en deux temps :
1. Pour toutA∈N, on calculeCA={X∈N|A→∗ X}. 2. On « court-circuite » les règles singulières.
12
Suppression des règles singulières
• Règle singulière (« non générative ») :A→BoùB∈N.
• Algorithme en deux temps :
1. Pour toutA∈N, on calculeCA={X∈N|A→∗ X}. 2. On « court-circuite » les règles singulières.
Suppression des règles singulières
• Règle singulière (« non générative ») :A→BoùB∈N.
• Algorithme en deux temps :
1. Pour toutA∈N, on calculeCA={X∈N|A→∗ X}.
2. On « court-circuite » les règles singulières.
12
Suppression des règles singulières
• Règle singulière (« non générative ») :A→BoùB∈N.
• Algorithme en deux temps :
1. Pour toutA∈N, on calculeCA={X∈N|A→∗ X}.
2. On « court-circuite » les règles singulières.
• Pour calculerCA={X∈N|A→∗ X}:
(en supposant qu’il n’y a pas d’ϵ-transition)
initialiserCX={X}pour toutX∈N pour toutX∈N:
pour tout(X→A)∈PoùA∈N: CX=CX∪CA
pour toutY∈Ntel queX∈CY: CY=CY∪CA
• Pour « court-circuiter » les règles singulières : P′={}
pour tout(X→α)∈Poùα /∈N: pour toutAtel queX∈CA:
P′ =P′+ (A→α)
13
• Pour calculerCA={X∈N|A→∗ X}:
(en supposant qu’il n’y a pas d’ϵ-transition) initialiserCX={X}pour toutX∈N
pour toutX∈N:
pour tout(X→A)∈PoùA∈N: CX=CX∪CA
pour toutY∈Ntel queX∈CY: CY=CY∪CA
• Pour « court-circuiter » les règles singulières : P′={}
pour tout(X→α)∈Poùα /∈N: pour toutAtel queX∈CA:
P′ =P′+ (A→α)
• Pour calculerCA={X∈N|A→∗ X}:
(en supposant qu’il n’y a pas d’ϵ-transition) initialiserCX={X}pour toutX∈N
pour toutX∈N:
pour tout(X→A)∈PoùA∈N: CX=CX∪CA
pour toutY∈Ntel queX∈CY: CY=CY∪CA
• Pour « court-circuiter » les règles singulières :
P′={}
pour tout(X→α)∈Poùα /∈N: pour toutAtel queX∈CA:
P′ =P′+ (A→α)
13
• Pour calculerCA={X∈N|A→∗ X}:
(en supposant qu’il n’y a pas d’ϵ-transition) initialiserCX={X}pour toutX∈N
pour toutX∈N:
pour tout(X→A)∈PoùA∈N: CX=CX∪CA
pour toutY∈Ntel queX∈CY: CY=CY∪CA
• Pour « court-circuiter » les règles singulières : P′={}
pour tout(X→α)∈Poùα /∈N: pour toutAtel queX∈CA:
′ ′
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
14
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
14
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
14
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deNϵ.
• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS′→ϵ.
14
Suppression des ϵ-transition
• ϵ-transition :A→ϵ.
• On peut transformer la grammaire de telle manière que l’on ait un axiome qui n’apparaît dans la partie droite d’aucune règle et telle qu’il n’y ait pas d’ϵ-transition excepté pour l’axiome.
• Pour avoir un axiome qui n’apparaît dans aucune partie droite :
• On ajoute un nouveau non-terminalS′, défini comme axiome, ainsi que la règleS′→S.
• Pour supprimer lesϵ-transitions :
• On calculeNϵ={X∈N|X→∗ ϵ}.
• Pour toute règleA→α∈P, on ajoute aussi toutes les règles A→α′oùα′est obtenu en supprimant deαun ou plusieurs symboles deN .
• Pour calculerNϵ={X∈N|X→∗ ϵ}:
Nϵ={}
continue = True while continue :
continue = False
pour tout(X→α)∈PetX∈/ Nϵ:
si tous les symboles deαsont dansNϵ:// notamment siα=ϵ
Nϵ=Nϵ+X continue = True
15
• Pour calculerNϵ={X∈N|X→∗ ϵ}: Nϵ={}
continue = True while continue :
continue = False
pour tout(X→α)∈PetX∈/ Nϵ:
si tous les symboles deαsont dansNϵ:// notamment siα=ϵ
Nϵ=Nϵ+X continue = True
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
16
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
16
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
16
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
16
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
• A→aBCd// suppression du second B et du E
• A→aCd// suppression des deux B et du E
16
Suppression dans les règles des symboles deNϵ
Pour
• A→aBCBdE;
• Nϵ={B,E}.
Les règles obtenues sont :
• A→aBCBdE// pas de suppression
• A→aCBdE// suppression du premier B
• A→aBCdE// suppression du second B
• A→aCdE// suppression des deux B
• A→aBCBd// suppression du E
• A→aCBd// suppression du premier B et du E
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes : 1. Suppression desϵ-transition ;
2. suppression des productions singulières ; 3. suppression des symboles inutiles.
17
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes : 1. Suppression desϵ-transition ;
2. suppression des productions singulières ; 3. suppression des symboles inutiles.
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes :
1. Suppression desϵ-transition ;
2. suppression des productions singulières ; 3. suppression des symboles inutiles.
17
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes : 1. Suppression desϵ-transition ;
2. suppression des productions singulières ; 3. suppression des symboles inutiles.
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes : 1. Suppression desϵ-transition ;
2. suppression des productions singulières ;
3. suppression des symboles inutiles.
17
Grammaire propre
• Grammaire propre :
• grammaire sansϵ-transition,
• sans cycle (A→...→A),
• sans symbole inutile.
• Processus en trois étapes : 1. Suppression desϵ-transition ;
2. suppression des productions singulières ; 3. suppression des symboles inutiles.
• Dans le polycopié, arrêtez-vous en arrivant à la section 9.2, Formes normales
• Vous pouvez ignorer :
• la section 9.1.5,Élimination des récursions gauches directes.
18
• Dans le polycopié, arrêtez-vous en arrivant à la section 9.2, Formes normales
• Vous pouvez ignorer :
• la section 9.1.5,Élimination des récursions gauches directes.
• Dans le polycopié, arrêtez-vous en arrivant à la section 9.2, Formes normales
• Vous pouvez ignorer :
• la section 9.1.5,Élimination des récursions gauches directes.
18
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.