Analyse syntaxique Tout langage de programmation possde des

  • Slides: 13
Download presentation
Analyse syntaxique

Analyse syntaxique

�Tout langage de programmation possède des règles qui indiquent la structure syntaxique d’un programme

�Tout langage de programmation possède des règles qui indiquent la structure syntaxique d’un programme bien formé Par exemple en Pascal un programme bien formé est composé de blocs, un bloc est formé d’instructions, une instruction de …. RQ. La syntaxe d’un langage peut être décrite par une grammaire

La problématique �L’analyseur syntaxique reçoit une suite d’unités lexicales de la part de l’analyseur

La problématique �L’analyseur syntaxique reçoit une suite d’unités lexicales de la part de l’analyseur lexical et doit vérifier que cette suite peut être engendrée par la grammaire du langage. �Le problème est donc: Étant donnée une grammaire G Étant donné un mot m (un programme) �La question: est ce que m appartient au langage g en er e par G

Solution �Le principe est d’essayer de construire un arbre de dérivation. Il existe deux

Solution �Le principe est d’essayer de construire un arbre de dérivation. Il existe deux méthodes pour cette construction, méthode d’analyse descendante et méthode d’analyse ascendante.

Analyse descendante �Principe: construire l’arbre de dérivation du haut (la racine, c’est à dire

Analyse descendante �Principe: construire l’arbre de dérivation du haut (la racine, c’est à dire l’axiome de départ) vers le bas (les feuilles, c’est à dire les unités lexicales).

Exemple 1 Soit G: S a. Ab A cd | c Les mots acdb

Exemple 1 Soit G: S a. Ab A cd | c Les mots acdb et adcb apparient-il à la grammaire G?

Exemple 2 �E E+E | E – E | E * E | E

Exemple 2 �E E+E | E – E | E * E | E /E | (E) | nb �Essayer le Mot: 3*(3+5)

La table d’analyse LL(1) �Pour construire une table d’analyse on a besoin des ensembles:

La table d’analyse LL(1) �Pour construire une table d’analyse on a besoin des ensembles: First et Follow. 1. Calcul de First Pour toute chaîne αcomposée de symbôles terminaux et non terminaux on cherche First(α) l’ensemble de tous les terminaux qui peuvent commencer une chaîne qui se dérive de α.

Algorithme de First 1. Si X est un non terminal et X Y 1

Algorithme de First 1. Si X est un non terminal et X Y 1 Y 2…Yn est une pro duction de la grammaire (avec Yi symbôle terminal ou non terminal) alors �Ajouter les eléments de First(Y 1) sauf ε dans First(X) �S’il existe j (j ∈{2, …, n} tel que pour tout i =1, …, (j-1) on a First(Yi), alors ajouter les eléments de First(Yj) sauf ε dans First(X) �si pour tout i = 1, …, n First(Yi), alors ajouter ε dans First(X) 2. 3. Si X est un non terminal et X ε est une production, ajouter ε dans First(X) Si X est un terminal First(X) = {X} Recommencer jusqu’à ce qu’on n’ajoute rien de nouveau dans les ensembles First.

Exemple �Soit G: S ABCe A a. A | ε B b. B |

Exemple �Soit G: S ABCe A a. A | ε B b. B | c. B | ε C de | da | d. A

Algorithme de Follow 1. Ajouter un marqueur de fin de chaîne à Follow(S) (Exemple

Algorithme de Follow 1. Ajouter un marqueur de fin de chaîne à Follow(S) (Exemple #)(où S est l’axiome de départ de la grammaire) 2. Pour chaque production A αBβ où B est un non terminal, alors ajouter le contenu de First(β) à Follow(B) sauf ε 3. Pour chaque production A αB alors, ajouter Follow(A) à Follow(B) Pour chaque production A αBβ avec ε ∈ First( β) alors, ajouter Follow(A) à Follow(B) Recommencer à partir de l’étape 3 jusqu’à ce qu’on n’ajoute rien de nouveau dans les ensembles Follow. 4.

Exemple �E TE’ �E’ + TE’ | ε �T FT’ �T’ *FT’ | /FT’

Exemple �E TE’ �E’ + TE’ | ε �T FT’ �T’ *FT’ | /FT’ | ε �F (E) | nb Calculer l’ensemble First et Follow pour chaque non terminal

Construction de la table d’analyse LL �Une table d analyse est un tableau M

Construction de la table d’analyse LL �Une table d analyse est un tableau M a deux dimensions qui indique pour chaque symbole non-terminal A et chaque symbole terminal a ou symbole $ la règle de production à appliquer. 1. Pour chaque production A α faire a) Pour tout a ∈ First( α) (où a ≠ ε), rajouter la règle A α dans la case M[A, a] b) Si ε ∈ First( α), alors pour b ∈ Follow(A), ajouter A αdans la case M[A, b] 2. Chaque case vide est une erreur de syntaxe.