Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1



Documents pareils
Théorie des Langages

Compilation. Algorithmes d'analyse syntaxique

CH.6 Propriétés des langages non contextuels

Initiation à la Programmation en Logique avec SISCtus Prolog

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les structures de données. Rajae El Ouazzani

Génie Logiciel avec Ada. 4 février 2013

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Algorithmique et Programmation, IMA

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Structures algébriques

Chapitre 2. Eléments pour comprendre un énoncé

Arbres binaires de recherche

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours d Algorithmique et de Langage C v 3.0

Évaluation et implémentation des langages

Initiation à l algorithmique

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 17/04/2007

chapitre 4 Nombres de Catalan

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Représentation d un entier en base b

Grammaires d unification

TP, première séquence d exercices.

Formula Negator, Outil de négation de formule.

Cours de Probabilités et de Statistique

OCL - Object Constraint Language

Algorithmes d'apprentissage

Cours de Programmation 2

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Rappels sur les suites - Algorithme

Fondements de l informatique Logique, modèles, et calculs

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : La compilation

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Chapitre 5 : Flot maximal dans un graphe

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Résolution de systèmes linéaires par des méthodes directes

Algorithmique et Programmation Fonctionnelle

Informatique Générale

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Programme et contenus Licence d'informatique de Lille, parcours MIAGE, en alternance ou en formation continue (13:40)

Intelligence Artificielle et Systèmes Multi-Agents. Badr Benmammar

Les algorithmes de base du graphisme

Pourquoi l apprentissage?

Initiation. àl algorithmique et à la programmation. en C

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Rappels Entrées -Sorties

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Chapitre 10 Arithmétique réelle

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

UE C avancé cours 1: introduction et révisions

Introduction à la théorie des graphes. Solutions des exercices

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

données en connaissance et en actions?

TP 4 de familiarisation avec Unix

Université Paris-Dauphine DUMI2E 1ère année, Applications

ALGORITHMIQUE ET PROGRAMMATION En C

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur

majuscu lettres accent voyelles paragraphe L orthographe verbe >>>, mémoire préfixe et son enseignement singulier usage écrire temps copier mot

Simulation de variables aléatoires

Comparaison de fonctions Développements limités. Chapitre 10

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Débuter avec Excel. Excel

Bases de données Cours 5 : Base de données déductives

Présentation du langage et premières fonctions

Traitement de texte : Quelques rappels de quelques notions de base

GUIDE Excel (version débutante) Version 2013

Algorithmique, Structures de données et langage C

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Manuel de référence du langage Exemples Les aventures de Docteur R.

Logique : ENSIIE 1A - contrôle final

Aide : publication de décisions VS

Qu est-ce qu une probabilité?

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Résolution d équations non linéaires

Le modèle standard, SPE (1/8)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Architecture des ordinateurs

STAGE IREM 0- Premiers pas en Python

Cours de Master Recherche

Présentation du cours de mathématiques de D.A.E.U. B, remise à niveau

DOCM Solutions officielles = n 2 10.

Cours d algorithmique pour la classe de 2nde

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Exercice 1 Trouver l équation du plan tangent pour chaque surface ci-dessous, au point (x 0,y 0,z 0 ) donné :

Calculs de probabilités

Chapitre 7. Récurrences

Algorithmique et programmation : les bases (VBA) Corrigé

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Transcription:

Chap 4: Analyse syntaxique 1

III- L'analyse syntaxique: 1- Le rôle d'un analyseur syntaxique 2- Grammaires non contextuelles 3- Ecriture d'une grammaire 4- Les méthodes d'analyse 5- L'analyse LL(1) 6- Constructeurs d'analyseurs syntaxiques 2

1- Rôle d'un analyseur syntaxique 1- Définition: Un analyseur syntaxique reçoit une suite d unités lexicales de l analyseur lexical et vérifie que cette chaîne est engendrée par la grammaire du langage. Le but d un analyseur syntaxique est de trouver la relation entre les unités lexicales pour constituer des phrases et entre les phrases pour constituer des phrases plus grandes et produire un arbre syntaxique. 3

1- Rôle d'un analyseur syntaxique Il y a 3 types généraux d analyseurs syntaxiques: 1- méthodes universelles comme celles de Cocke-Younger-Kasami qui peuvent analyser une grammaire quelconque 2- méthodes ascendantes qui construisent des arbres d analyse en partant des feuilles vers la racine. 3- méthodes descendantes qui construisent des arbres d analyse en partant de la racine vers les feuilles texte source A.L. U.L A.S. Arbre reste lire l UL suivante syntaxique 4

1- Rôle d'un analyseur syntaxique 2- Traitement des erreurs: Les programmes peuvent contenir des erreurs à différentes phases de la compilation: - lexical: comme l écriture est erroné d'un identificateur, - syntaxique: comme une expression mal parenthésée - sémantique: comme un opérateur appliqué à un opérande incompatible Souvent, la détection et la récupération des erreurs se fait principalement dans la phase d analyse syntaxique. Prof. M.D. RAHMANI Prof M.D. RAHMANI Compilation SMI- S5 2013/14 5

1- Rôle d'un analyseur syntaxique Les stratégies les plus utilisées sont: 1- récupération en mode panique: son implantation est simple, il s agit d ignorer les symboles d entrée les unes après les autres jusqu à rencontrer un symbole de synchronisation. 2- récupération au niveau du syntagme: correction locale exemple: remplacer une virgule par un point-virgule 3- productions d erreur: ajouter des productions à la grammaire qui tiennent compte des erreurs courantes. 4- correction globale: concevoir des algorithmes qui peuvent effectuer le minimum de changement sur une chaîne erronée pour la corriger. Prof. M.D. RAHMANI Prof M.D. RAHMANI Compilation SMI- S5 2013/14 6

2- Grammaires non contextuelles Souvent les constructions des langages de programmation ont des structures récursives. Les phrases ou les constructions d un tel langage peuvent être définies par des grammaires (axiome, terminaux, non terminaux, productions). Exemple: soit S1 et S2 deux instructions et E une expression. et soit le texte d entrée: «si E alors S1 sinon S2» La production associée est: instr si (exp) alors instr sinon instr 7

2- Grammaires non contextuelles 1- Dérivation: La définition d un langage par une grammaire peut être vue comme un processus de construction de l arbre syntaxique. La dérivation est une description de la construction descendante de cet arbre. On traite une production en remplaçant le non terminal de la partie gauche par la partie droite de la production. Exemple: soit la grammaire des expressions arithmétiques E E + E E * E (E) -E id -E est aussi une expression E se dérive en E en une étape: E -E Une dérivation de E en (id) : E - E (E) (id) E se dérive en (id) en 3 étapes. 8

2- Grammaires non contextuelles D une manière générale: si A γ alors α Aβ αγβ avec α, β,γ des suites de symboles grammaticaux Notation: * se dérive en zéro ou plusieurs étapes + se dérive en une ou plusieurs étapes Soit G une grammaire, S son axiome et L(G) le langage engendré par G. Une chaîne de terminaux ω L(G) si et seulement si S + ω La chaîne ω est appelée phrase de L(G). Si S * α, avec α pouvant contenir certains non terminaux, α est appelée proto-phrase. 9

2- Grammaires non contextuelles Question : Montrer que la chaîne «-(id+id)» est une phrase engendrée par la grammaire précédente? E -E -(E) -(E+E) g -(id+e) g -(id+id) : dérivation gauche d -(E+id) d -(id+id) : dérivation droite Notation: α g β; α se dérive en βen remplaçant le non terminal de α le plus à gauche 10

2- Grammaires non contextuelles 2- Arbre syntaxique et dérivation : Un arbre syntaxique est une représentation graphique d une dérivation dans laquelle l ordre de remplacement a disparu. Exemple: soit la phrase -(id+id) E - E ( E ) E + E id id 11

3- Ecriture d une grammaire Chaque construction qui peut être écrite par une expression régulière peut également être décrite par une grammaire dite régulière. exemple: soit l expression régulière (a b)* abb début a b l AFN correspondant est: a b b A0 A1 A2 A3 La grammaire associée est: A0 a A0 b A0 a A1 A1 b A2 A2 b A3 A3 ε 12

3- Ecriture d une grammaire Construction d une grammaire régulière: - On nomme chaque état de l automate, - A chaque état de l automate correspond un non terminal de la grammaire. - L état initial de l automate correspond à l axiome de la grammaire. - A chaque transition correspond une production de la grammaire. - A l état d acceptation correspond une production d une chaîne vide. 13

3- Ecriture d une grammaire 1- Suppression de l'ambiguïté: Une grammaire est dite ambigüe si elle produit plus d un arbre syntaxique pour la même phrase. exemple: Soit la grammaire des instructions conditionnelles à la PASCAL: instr exp si exp alors instr si exp alors instr sinon instr autre Ei Et soit l instruction: «si E1 alors si E2 alors S1 sinon S2» 14

3- Ecriture d une grammaire Nous avons, d après cette grammaire, deux interprétations possibles pour la même phrase : 1- si E1 alors si E2 alors S1 sinon S2 l arbre d analyse correspondant: si exp instr alors instr E1 si exp alors instr sinon instr 2- si E1 alors si E2 alors S1 sinon S2 l arbre d analyse correspondant: instr si exp alors instr sinon instr E1 si exp alors instr E2 S1 S2 E2 S1 S2 Cette grammaire est ambigüe. 15

3- Ecriture d une grammaire Dans les langages de programmation ayant des instructions conditionnelles, on préfère le 1 er arbre. Par convention on fait correspondre chaque sinon avec le si qui le précède, le plus proche et sans correspondant. L idée est qu une instruction apparaissant entre un alors et un sinon doit être close, c-à-d qu elle ne doit pas se terminer par un alors sans correspondant. Une instruction close est soit une instruction si-alors-sinon ne contenant pas d instruction non close, soit une instruction non conditionnelle quelconque. La réécriture de cette grammaire donne : 16

3- Ecriture d une grammaire instr instr-close instr-non-close instr-close si exp alors instr-close sinon instr-close autre instr-non-close si exp alors instr si exp alors instr-close sinon instr-non-close A tester pour l instruction: «si E1 alors si E2 alors S1 sinon si E3 alors S2 sinon S3» Remarque: Pour éviter ce type d ambigüité, certains langages introduisent des fin-de-si : - fi pour Algol 68, Eiffel - end pour Modula - endif pour ADA - done pour Newton 17

3- Ecriture d une grammaire 2- Suppression de la récursivité gauche: Une grammaire est dite récursive à gauche si elle contient un non terminal A tel qu il existe une dérivation: A + Aα avec α une chaîne quelconque de symboles grammaticaux (une suite de terminaux et de non terminaux). Soit la grammaire: A Aα 1 A α 2. Aα m β 1. β n Pour supprimer la récursivité gauche, nous réécrivons cette grammaire sous la forme: A β 1 A β 2 A. β n A A α 1 A α 2 A. α m A ε avec les βi ne commençant pas par A, et les α i ne commençant pas par A et ne produisent pas la chaîne vide 18

3- Ecriture d une grammaire Exemple : soit la grammaire récursive à gauche: E E + T T α1 = + T, β = T T T * F F α1 = * F, β = F F id (E) La grammaire, non récursive à gauche, équivalente est: E T E E + T E ε T F T T * F T ε F id (E) 19

3- Ecriture d une grammaire Remarque: cas d une récursivité cachée A α + Aβ Exemple: S A A a b A c S d ε le S est récursif à gauche. 20

3- Ecriture d une grammaire 3- La factorisation à gauche: Si les parties droites de plusieurs productions commencent par le même préfixe, lors de l analyse il n est pas évident de choisir la bonne production. ( AFN dans l analyse lexicale ) Soit les S-productions S A β1 A β2.. A βn avec A le préfixe commun. En factorisant à gauche, on a: S A A A β1 β2. βn 21

3- Ecriture d une grammaire Exemple: soit les S-règles S A B C D S A B a D S A b a factorisées, elles deviennent: S E F A E B F b a C D a D 22

4- Les méthodes d analyse Les différentes questions que l on pose par rapport aux phrases engendrées par une grammaire sont: Supposons qu on a une phrase ω : - comment analyser ω? -ωappartient-elle au langage L(G)? - si ωϵl(g), ϵ donner une dérivation. phrase analyseur [oui, non] la phrase est elle correcte? 23

4- Les méthodes d analyse Il y a 2 critères de classification pour distinguer les différentes méthodes d analyse syntaxique: - le sens de parcours de la chaîne analysée: gauche-droite ou droitegauche. X = L,R - le sens d application des productions: dérivation ou réduction. on distingue 4 méthodes d analyse désignées par un couple XY. X- le sens de parcours, Y- le sens d application des productions L: Left to Right R: Right to Left Y = L,R L: Leftmost derivation R: Rightmost derivation Les 4 combinaisons sont: XY LY RY LL LR RL RR 24

5- L analyse LL(1) C est une analyse avec une inspection d un symbole terminal en avance sur le symbole courant traité. Dans la pratique ce sont les grammaires les plus utilisées. Le but de l analyse LL(1) est de pouvoir (toujours) connaître la règle de production à appliquer et ceci en se basant sur le terminal suivant non encore traité de la phrase en cours d examen. Deux concepts nouveaux se révèlent nécessaires pour faciliter l'analyse LL(1): - PREMIER (FIRST) - SUIVANT (FELLOW) 25

5- L analyse LL(1) Définition: Une grammaire est LL(1) si elle remplit la condition suivante: Quel que soit A un non terminal tel que: A α et A β avec α et β 2 symboles grammaticaux, on a: S * ω A γ ωαγ * ω x g g ωβγ * ω y si PREMIER(x) = PREMIER(y) alors α = β si PREMIER(x) PREMIER(y) alors α β 26

5- L analyse LL(1) PREMIER représente l ensemble des premiers symboles terminaux qui commencent x et x ϵ. c-à-d qu à un instant donné de la dérivation; s il y a plusieurs chemins pour arriver à la phrase que l on analyse, ces chemins sont identiques et la connaissance du prochain symbole de la phrase est suffisant pour déterminer la règle de production à utiliser. 27

5- L analyse LL(1) 1- Les ensembles PREMIER et SUIVANT: Les notions PREMIER et SUIVANT sont utiles d une part pour montrer qu une grammaire est LL(1) et d autre part pour la construction de l analyseur syntaxique. 1.1- L ensemble PREMIER: - si a est un terminal, alors: PREMIER(a) = {a} de même: PREMIER(ε) = {ε} - si A bα, alors b est un élément de PREMIER(A) - si A B α, alors PREMIER(B) С PREMIER(A) si B peut produire la chaîne vide, alors ((PREMIER(B)\{ε}) U PREMIER(α)) С PREMIER(A) D une autre manière, PREMIER(α) inclut toujours l ensemble PREMIER du premier symbole de α. Si celui-ci peut produire ε, il inclut aussi l ensemble PREMIER du second symbole de α, etc Si tous les symboles de α peuvent produire ϵ alors PREMIER(α) contient ε. 28

5- L analyse LL(1) 1.2- L ensemble SUIVANT: Nous appliquons les règles suivantes jusqu à ce qu aucun terminal ne puisse être ajouté aux ensembles SUIVANT. - mettre $ dans SUIVANT de l axiome. - s il y a une production : A α B β, le contenu de PREMIER(β), excepté la chaîne vide est ajouté à SUIVANT(B) - s il y a une production : A α B ou A α B β tq β * ε les éléments de SUIVANT(A) sont ajoutés à SUIVANT(B) 29

5- L analyse LL(1) Exemple: Soit la grammaire: E E + T E - T T T T * F T / F F F id (E) La grammaire équivalente: E T E E + T E' - T E ε T F T T * F T / F T ε F id (E) PREMIER(F) = {id,(} PREMIER(T) = {id,(} PREMIER(E) = {id,(} SUIVANT(E) = {$, +, -, )} SUIVANT(T) = {$, +, -, *, /, )} SUIVANT(F) = {$, +, -, *, /, )} PREMIER(F) = {id,(} PREMIER(T) = {id,(} PREMIER(T ) = {*, /, ε} PREMIER(E) = {id,(} PREMIER(E ) = {+, -, ε} SUIVANT(E) = {$, )} SUIVANT(E )= {$,)} SUIVANT(T) = {$, +, -, )} SUIVANT(T )= {$,),+,-} SUIVANT(F) = {$, +,-, *,/, )} 30

5- L analyse LL(1) 2- Les conditions LL(1): Pour qu une grammaire soit de type LL(1), c est-à-dire qu elle soit analysable par une méthode descendante déterministe, il faut que ses règles de production respectent 2 conditions: soit une paire de règles: A α et A β on a: 1 ère condition: PREMIER(α) PREMIER(β) = Ø exemple: A a B a C 2 ème condition: si εєpremier(β) alors PREMIER(α) SUIVANT(A) = Ø exemple: sinon en suspens [G est LL(1) PREMIER(αSUIVANT(A)) PREMIER(βSUIVANT(A)) = ] 31

5- L analyse LL(1) Exemple 1: Considérons la grammaire des expressions arithmétiques, E T E E + T E ε T F T T * F T ε F (E) nb 32

5- L analyse LL(1) Exemple 2: Soit la grammaire suivante S Xa S ε X Xb X Y Y ax Y ε 33

5- L analyse LL(1) Exemple 3: Montrer qu'une grammaire LL(1) ne peut pas avoir des productions récursives à gauche, c'est à dire: A A α β 34

5- L analyse LL(1) 3- Construction d un analyseur LL(1): L intérêt de cet analyseur est de reconnaître et de fournir l unique dérivation gauche des phrases d un langage. pile. Un analyseur LL(1) est implanté sous forme d un automate à Il est constitué de: - un tampon qui contient la chaîne du programme à analyser, suivie par le symbole $. - une pile qui contient une séquence de symboles grammaticaux, avec $ au fond de la pile. - une table d analyse à deux dimensions qui permet de choisir la règle de production à utiliser. 35

5- L analyse LL(1) a a b a b $ chaîne à analyser TABLE D ANALYSE ANALYSEUR PREDICTIF A a B $ OUI / NON Pile

5- L analyse LL(1) 3.1- Table d analyse: Elle est constituée de l ensemble des règles à utiliser, DEPILER, ERREUR, ACCEPTE. Donnée: une grammaire. Résultat: une table d analyse M pour G. Méthode: M[A,a]= { - A α si a Є PREMIER(α), - A α si α * ϵ et a Є SUIVANT(A), - ERREUR } M[a,b]= { - DEPILER si a=b, - ACCEPTE si a=b=$, - ERREUR } 37

Algorithme de construction de la table d analyse syntaxique Début M ; pour chaque règle A αfaire pour chaque a Premiers(α) faire M[A,a] M[A,a] {A α} fait; si ε Premiers(α) alors pour chaque b Suivants(A) faire M[A,b] M[A,b] {A α} fait; fsi; fait; Fin.

5- L analyse LL(1) 3.2 Exemple 1: Grammaire symbolisant if-then-else après factorisation (elle est ambiguë): S i E t S S a S S E S e S ε PREMIER i, a e, ϵ b E b SUIVANT $, e $, e t a b e i t $ S S a erreur erreur S ietss erreur erreur S erreur erreur S es S ε erreur erreur S ε E erreur E b erreur erreur erreur erreur 39

5- L analyse LL(1) Exemple 2 : soit la grammaire, E T E E +TE ε T FT T *FT ε F (E) nb on associe la table d analyse suivante: nb + * ( ) $ E E TE E TE E E +TE E ε E ε T T FT T FT T T ε T *FT T ε T ε F F nb F (E)

5- L analyse LL(1) La trace d'analyse: Pour analyser une chaîne, on initialise l'automate à pile, en empilant $ puis l'axiome. Ensuite, on combine le s symboles du texte d'entrée, les uns après les autres, avec le symbole courant au sommet de la pile. Lorsque cette combinaison nous donne, à partir de la table d'analyse, une règle de production à appliquer, on remplace le symbole au sommet de la pile par la partie droite de la production. pile tampon Etat initial S$ ω$ Etat final $ $ La trace d'analyse, nous donne l'arbre d'analyse, et le processus de l'unique dérivation gauche de la phrase analysée.

3.3- La trace d analyse: Soit la phrase à analyser: «nb + nb * nb» Pile Tampon Action E$ nb+nb*nb$ E TE TE'$ nb+nb*nb$ T FT FT'E'$ nb+nb*nb$ F nb nbt'e'$ nb+nb*nb$ DEPILER T E'$ +nb*nb$ T ε E'$ +nb*nb$ E +TE +TE'$ +nb*nb$ DEPILER TE'$ nb*nb$ T FT FT'E'$ nb*nb$ F nb nbt'e'$ nb*nb$ DEPILER T E'$ *nb$ T *FT *FT'E'$ *nb$ DEPILER FT'E'$ nb$ F nb nbt'e'$ nb$ DEPILER T E'$ $ T ε E $ $ E ε $ $ ACCEPTE 42