• Aucun résultat trouvé

Langages formels et analyse syntaxique CM2 : Les grammaires hors-contexte et leurs transformations

N/A
N/A
Protected

Academic year: 2022

Partager "Langages formels et analyse syntaxique CM2 : Les grammaires hors-contexte et leurs transformations"

Copied!
83
0
0

Texte intégral

(1)

Langages formels et analyse syntaxique

CM2 : Les grammaires hors-contexte et leurs transformations

Timothée Bernard 25 septembre 2020

Université de Paris

(2)

Grammaires hors-contexte

(« algébriques », « CFG »)

(3)

À lire

• Chapitre 6 du polycopié d’Yvon et Demaille (2016).

(4)

À lire

• Chapitre 6 du polycopié d’Yvon et Demaille (2016).

1

(5)

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}

(6)

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

(7)

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 ».

(8)

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

(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 ».

(10)

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

(11)

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 ».

(12)

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

(13)

• 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).

(14)

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(avec=ϵou=ϵ),

• etA→ w.

5

(15)

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(avec=ϵou=ϵ),

• etA→ w.

(16)

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(avec=ϵou=ϵ),

• etA→ w.

5

(17)

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(avec=ϵou=ϵ),

• etA→ w.

(18)

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(avec=ϵou=ϵ),

• etA→ w.

5

(19)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

(20)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

6

(21)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

(22)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF. SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

6

(23)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF.

SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

(24)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF.

SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

6

(25)

Propriétés de clôture

SiL1etL2sont deux langages CF :

L1∪L2est aussi un langage CF ;

L1L2est aussi un langage CF ;

L1est aussi un langage CF ;

L1∩L2n’est pas toujoursun langage CF.

SiL1est CF etL2est régulier :

L1∩L2est un langage CF.

(26)

• 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

(27)

• 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...

(28)

• 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

(29)

• 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...

(30)

Normalisation des grammaires CF

(31)

À lire

• Chapitre 9 du polycopié d’Yvon et Demaille (2016).

(32)

À lire

• Chapitre 9 du polycopié d’Yvon et Demaille (2016).

8

(33)

• 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).

(34)

• 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

(35)

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.

(36)

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

(37)

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.

(38)

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

(39)

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.

(40)

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

(41)

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.

(42)

• 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

(43)

• 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

(44)

• 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

(45)

• 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α:

(46)

Suppression des règles singulières

• Règle singulière (« non générative ») :A→BB∈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

(47)

Suppression des règles singulières

• Règle singulière (« non générative ») :A→BB∈N.

• Algorithme en deux temps :

1. Pour toutA∈N, on calculeCA={X∈N|A→ X}. 2. On « court-circuite » les règles singulières.

(48)

Suppression des règles singulières

• Règle singulière (« non générative ») :A→BB∈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

(49)

Suppression des règles singulières

• Règle singulière (« non générative ») :A→BB∈N.

• Algorithme en deux temps :

1. Pour toutA∈N, on calculeCA={X∈N|A→ X}.

2. On « court-circuite » les règles singulières.

(50)

• 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)∈PA∈N: CX=CX∪CA

pour toutY∈Ntel queX∈CY: CY=CY∪CA

• Pour « court-circuiter » les règles singulières : P={}

pour tout(X→α)∈Pα /∈N: pour toutAtel queX∈CA:

P =P+ (A→α)

13

(51)

• 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)∈PA∈N: CX=CX∪CA

pour toutY∈Ntel queX∈CY: CY=CY∪CA

• Pour « court-circuiter » les règles singulières : P={}

pour tout(X→α)∈Pα /∈N: pour toutAtel queX∈CA:

P =P+ (A→α)

(52)

• 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)∈PA∈N: CX=CX∪CA

pour toutY∈Ntel queX∈CY: CY=CY∪CA

• Pour « court-circuiter » les règles singulières :

P={}

pour tout(X→α)∈Pα /∈N: pour toutAtel queX∈CA:

P =P+ (A→α)

13

(53)

• 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)∈PA∈N: CX=CX∪CA

pour toutY∈Ntel queX∈CY: CY=CY∪CA

• Pour « court-circuiter » les règles singulières : P={}

pour tout(X→α)∈Pα /∈N: pour toutAtel queX∈CA:

(54)

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→αα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

(55)

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→ααest obtenu en supprimant deαun ou plusieurs symboles deNϵ.

• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS→ϵ.

(56)

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→αα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

(57)

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→ααest obtenu en supprimant deαun ou plusieurs symboles deNϵ.

• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS→ϵ.

(58)

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→αα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

(59)

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→ααest obtenu en supprimant deαun ou plusieurs symboles deNϵ.

• Enfin, si la grammaire originale produisait le mot vide, on ajoute la règleS→ϵ.

(60)

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→αα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

(61)

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→ααest obtenu en supprimant deαun ou plusieurs symboles deN .

(62)

• 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

(63)

• 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

(64)

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

(65)

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

(66)

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

(67)

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

(68)

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

(69)

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

(70)

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

(71)

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

(72)

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

(73)

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

(74)

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

(75)

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.

(76)

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

(77)

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.

(78)

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

(79)

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.

(80)

• 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

(81)

• 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.

(82)

• 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

(83)

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.

Références

Documents relatifs

§ Langage de programmation Algol 1960 (J.. associativité, priorité des opérateurs).. associativité, priorité des opérateurs).. associativité, priorité des

§ Langage de programmation Algol 1960 (J.. associativité, priorité

• 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

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

Bon exercice : modifier l’algorithme afin de construire la tableT ′ en même temps que T, puis écrire l’algorithme listant toutes les