Notes de cours. Chapitre 7. Introduction à l analyse syntaxique. Ahmed KHOUMSI. Hiver 2002 PLAN

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

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

Cours 1 : La compilation

Théorie des Langages

Rappels Entrées -Sorties

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

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

Algorithmique et Programmation, IMA

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

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Continuité et dérivabilité d une fonction

Évaluation et implémentation des langages

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

Organigramme / Algorigramme Dossier élève 1 SI

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Représentation des Nombres

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

Code_Aster. Procédure IMPR_RESU aux formats 'RESULTAT' et 'ASTER' 1 But

TD3: tableaux avancées, première classe et chaînes

Les structures de données. Rajae El Ouazzani

Chapitre 10 Arithmétique réelle

STAGE IREM 0- Premiers pas en Python

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Chapitre I Notions de base et outils de travail

Algorithmique et programmation : les bases (VBA) Corrigé

OCL - Object Constraint Language

Initiation à la Programmation en Logique avec SISCtus Prolog

Maple: premiers calculs et premières applications

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours de Systèmes d Exploitation

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

R01 Import de données

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours 1 : Qu est-ce que la programmation?

Initiation à la programmation en Python

Compilation (INF 564)

Cours d algorithmique pour la classe de 2nde

COMPTABILITE SAGE LIGNE 30

TP1 - Prise en main de l environnement Unix.

TP 1. Prise en main du langage Python

Traduction des Langages : Le Compilateur Micro Java

Fiche PanaMaths Calculs avec les fonctions sous Xcas


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

Le chiffre est le signe, le nombre est la valeur.

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

Représentation d un entier en base b

Cours de Programmation 2

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Introduction à l algorithmique et à la programmation M1102 CM n 3

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

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Grammaires d unification

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation linéaire

Cours d Algorithmique et de Langage C v 3.0

Logiciel Libre Cours 3 Fondements: Génie Logiciel

progression premiere et terminale

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE MINISTERE DE LA FORMATION PROFESSIONNELLE. Microsoft. Excel XP

Algorithmique avec Algobox

Créer vos données sources avec OpenOffice, adieu Excel

Qu est-ce qu un résumé?

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Administration du site (Back Office)

Pas d installations ou d équipement particuliers.

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

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

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

ACCÈS SÉMANTIQUE AUX BASES DE DONNÉES DOCUMENTAIRES

CRÉER UN COURS EN LIGNE

TP 1 Prise en main de l environnement Unix

Conception de circuits numériques et architecture des ordinateurs

Calc 2 Avancé. OpenOffice.org. Guide de formation avec exercices et cas pratiques. Philippe Moreau

Compte-rendu de Hamma B., La préposition en français

Programmation en langage C

Rappels sur les suites - Algorithme

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

Compilation. Algorithmes d'analyse syntaxique

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

1 Description générale de VISFIELD

Bases de programmation. Cours 5. Structurer les données

Corrigé des TD 1 à 5

Présentation du langage et premières fonctions

Introduction au langage C

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

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Utiliser un tableau de données

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Transcription:

Notes de cours GEI 443 : ORGANISATION DES LANGAGES ET COMPILATION Chapitre 7 Introduction à l analyse syntaxique 1 But de l analyse syntaxique PLAN Types d erreurs dans un langage de programmation Traitement des erreurs syntaxiques Stratégies de récupération sur erreur - récupération en mode panique - récupération au niveau du syntagme - récupération par production d erreurs - récupération par correction globale Contraintes sur les grammaires pour spécifier la syntaxe - exemple de contrainte : grammaire non ambiguë - exemple de contrainte : grammaire non récursive à gauche Méthodes d analyse : - analyse descendante - analyse ascendante 2 1

But d un analyseur syntaxique Travail essentiel effectué : - regroupe les unités lexicales en structures grammaticales - vérifie si la syntaxe est correcte - construit un AST représentant la structure hiérarchique sur le flot des unités lexicales Résultat essentiel en sortie : - signale si la syntaxe est correcte - Un AST 3 Types d erreurs Erreurs lexicales (détectées par le scanner) tout ce qui n est pas conforme à la grammaire (régulière) définissant le vocabulaire Exemple : écriture erronée d une unité lexicale telle que un identificateur, un mot clé, un opérateur... Erreurs syntaxiques (détectées par le parser) tout ce qui n est pas conforme à la grammaire (hors-contexte) définissant la syntaxe Exemples : - expression arithmétique mal parenthésée - mot clé if sans le then correspondant - affectation sans partie droite a := ; - affectation sans partie gauche := b; C est l objet de cette partie du cours 4 2

Types d erreurs (suite) Erreurs sémantiques (détectées par l analyseur sémantique) Généralement, la sémantique d un langage est spécifiée d une manière informelle car une spécification formelle serait : - complexe à réaliser - et surtout trop complexe à analyser Ceci est dû au fait que la grammaire nécessaire pour spécifier la sémantique d un langage n est pas hors-contexte On détermine alors d une manière informelle, un certain nombre d erreurs sémantiques que l on désire détecter Exemples : - opérateur appliqué à un opérande incompatible - utilisation d une procédure incompatible avec sa définition (déclaration) (sur nombre ou type d arguments ) Erreurs logiques Exemple : un appel récursif infini 5 Traitement des erreurs syntaxiques En général, plus grande part du traitement des erreurs est faite par le parser. Car : - une grande partie des erreurs effectuées sont par nature syntaxiques - il existe des méthodes performantes pour détecter les erreurs syntaxiques Gestionnaire des erreurs dans un Parser - indiquer présence d erreurs de façon claire et précise (lieu, cause ) - traiter chaque erreur rapidement - ne pas ralentir de façon significative la compilation d un programme correct Dans la grande majorité des cas, les buts du gestionnaire sont facilement atteints Car une grande partie des erreurs mettent en jeu une seule unité lexicale Exemple : Une étude sur des programmes Pascal écrits par des étudiants montre que la plus grande partie des erreurs est due à l usage incorrect du point-virgule Buts du gestionnaire des erreurs deviennent difficiles à atteindre lorsque, par exemple, une erreur se produit longtemps avant sa détection. Exemple : oubli de } en langage C 6 3

Traitement des erreurs syntaxiques (suite) Il existe des méthodes d analyse syntaxique permettant de détecter une erreur dès que possible Exemples : Méthodes LL et méthodes LR (présentées ultérieurement) Après détection d une erreur, le gestionnaire des erreurs doit, si possible : - indiquer emplacement (dans le programme source) où erreur produite exemple : visualiser ligne erronée, avec marqueur désignant position de l erreur - donner la cause de l erreur exemples : - parenthèse fermante en plus - point-virgule manquant Nous allons maintenant présenter les stratégies de récupération sur erreur qui spécifient ce qu il faut faire après détection d erreur 7 Récupération en mode panique La plus simple à implanter, applicable dans la plupart des méthodes d analyse Pendant le déroulement de l analyse syntaxique, un ensemble d unités lexicales (symboles) de synchronisation est continuellement mis à jour Lorsque erreur détectée, on saute (ignore) tous les symboles donnés par le scanner jusqu à ce qu on rencontre un symbole de synchronisation Exemple : - À l intérieur d un bloc de (c-à-d. entre si et finsi), le symbole finsi peut être utilisée comme symbole de synchronisation - Dans une instruction d affectation, le point-virgule peut être utilisé comme symbole de synchronisation 8 4

Récupération en mode panique (suite) Inconvénients Partie considérable du programme peut être sautée sans vérifier sa validité Avantages - Simple - Ne boucle pas indéfiniment Récupération en mode panique adéquate lorsque des erreurs multiples dans une même instruction sont rares 9 Récupération au niveau du syntagme Lorsque erreur détectée, le parser peut effectuer des corrections locales en modifiant le préfixe du texte source restant Exemples : - remplacer une virgule par un point-virgule - détruire un point-virgule - insérer un point-virgule manquant Le choix d une correction est laissé au concepteur du compilateur Contrainte sur le choix d une correction : il faut choisir un remplacement ne conduisant pas à une boucle infinie Exemple : on peut avoir une boucle infinie, si on insère toujours quelquechose devant le symbole courant de la chaîne Inconvénient : Difficulté à gérer les situations dans lesquelles l erreur réelle s est produite avant le point de détection 10 5

Récupération par production d erreurs Si on a une idée précise des erreurs courantes, alors on augmente la grammaire du langage avec des règles de productions qui engendrent des constructions erronées Exemple : Soit une grammaire définie par les règles de dérivation suivantes Expr Expr Op Expr Op + Expr ( Expr ) Op - Expr - Expr Op * Expr id Op / Où : Expr et Op sont des symboles non-terminaux id + - * / ( ) sont des symboles terminaux Pour détecter une parenthèse fermante mal placée, il suffit d ajouter les règles Erreur Op ) Erreur Expr ) Lorsqu une des deux règles est utilisée par le parser, alors celui-ci exécute des action données : par exemple, envoi de message d erreur détaillé Inconvénient : Traiter grand nombre d erreurs implique nombre important de règles représentant erreurs 11 Récupération par correction globale Permet de minimiser les changements effectués Données du problème : - une grammaire G - une chaîne ξ de terminaux, syntaxiquement incorrecte Résultat : une chaîne ζ remplaçant ξ telle que - le nombre d insertions, de remplacements et de suppressions de terminaux pour passer de ξ à ζ soit minimal - la chaîne ζ est syntaxiquement correcte Inconvénient : Méthode trop coûteuse en mémoire et en temps Pour l instant, a un intérêt uniquement théorique 12 6

Contraintes sur grammaires Vocabulaire d un langage est spécifié par une grammaire régulière Syntaxe est spécifiée par une grammaire : - hors-contexte (non contextuelle) - qui doit satisfaire des contraintes supplémentaires qui dépendent de la méthode d analyse syntaxique adoptée 13 Premier exemple de contrainte : grammaire non ambiguë Une grammaire qui produit plus d un AST pour une phrase donnée est dite ambiguë Exemple : Condition définie par règles Inst si Expr alors Inst Inst Exemple de phrase non ambiguë : si E1 alors S1 sinon si E2 alors S2 sinon S3 L AST correspondant peut être schématisé comme suit si Expr alors Inst sinon Inst E1 S1 E2 S1 S3 14 7

Premier exemple de contrainte : grammaire non ambiguë (suite) Exemple de phrase ambiguë : si E1 alors si E2 alors S1 sinon S2 Premier AST correspondant (sinon associé au second si) E1 E2 S1 S2 Second AST correspondant (sinon associé au premier si) E1 S2 E2 S1 15 Premier exemple de contrainte : grammaire non ambiguë (suite) L ambiguïté peut être résolue en modifiant la grammaire comme suit Inst Inst1 Inst1 Inst2 si Expr alors Inst1 sinon Inst1 Inst2 si Expr alors Inst si Expr alors Inst1 sinon Inst2 Avec ces nouvelles règles, seul le premier AST est produit Certaines méthodes d analyse syntaxique acceptent des grammaires ambiguës. Ces méthodes utilisent des règles pour lever l ambiguïté en ne conservant qu un AST unique pour chaque phrase (c est le cas du parser généré par YACC) 16 8

Second exemple de contrainte : grammaire non récursive à gauche Une grammaire est récursive à gauche si elle possède une ou plusieurs règles de la forme A Aα où : A est un non-terminal α est une chaîne quelconque de symboles (terminaux ou non-terminaux) ne commençant pas par A Certaines (mais pas toutes) méthodes d analyse syntaxique ne supportent pas les grammaires récursives à gauches Suppression de la récursivité à gauche comme suit : Soit la règle A Aα1 Aα2... Aαn β1 β2... βm où : A est un non-terminal αi et βj sont des chaînes de symboles (terminaux ou non-terminaux) ne commençant pas par A Cette règle peut être remplacée par les deux règles suivantes A β1a β2a... βma A ε α1a α2a... αna 17 Second exemple de contrainte : grammaire non récursive à gauche (suite) Exemple de suppression de la récursivité à gauche A A a b où : A est un non-terminal a et b sont des terminaux Le langage engendré par cette règle est défini par l expression régulière ba* La règle ci-dessus peut être remplacée par A ba A aa ε Pour comprendre la nécessité de la non-récursivité (pour certaines méthodes), considérons un analyseur syntaxique qui, pour analyser une phrase donnée : - part du symbole de départ - parcourt la phrase à analyser de gauche à droite - décide, à la lecture de chaque symbole, de la dérivation à appliquer Si la phrase à analyser peut être obtenue après une séquence de dérivation, alors elle est jugée correcte. Sinon, on ne peut rien conclure. 18 9

Interprétation intuitive de la nécessité de la non-récursivité à gauche Considérons, par exemple, la phrase baa à analyser Analyse en utilisant les règles A A a et A b Premier caractère lu est b Le parser ne peut pas décider laquelle des deux règles appliquer car il ne sait pas ce qui vient après b Pour dériver la phrase à analyser, il faudrait appliquer la première règle deux fois, et ensuite la seconde règle Analyse en utilisant les règles A ba A aa et A ε - Symbole de départ est A - Première règle appliquée une fois au début, sur lecture de b Le symbole courant est ba - La seconde règle est appliquée à chaque lecture de a, donc deux fois À sa première application, le symbole courant devient baa À sa seconde application, le symbole courant devient baaa - La troisième règle est appliquée à la lecture de fin de chaîne Le symbole courant devient baa La phrase est donc correcte 19 Méthodes d analyse Soit une grammaire G définie par : Vt, Vn, S et P Soit une phrase p constituée de symbole terminaux Le but est alors de déterminer si on peut dériver p à partir de S Autrement dit, il s agit de déterminer s il existe un arbre syntaxique correspondant à la phrase p Deux approches sont généralement utilisées : - analyse descendante - analyse ascendante 20 10

Analyse descendante - On commence par le symbole de départ S - On applique différentes règles de l ensemble P Si on arrive à dériver p à partir de S alors p est syntaxiquement correcte Autrement dit, il s agit de construire l arbre syntaxique : - en commençant par la racine - en descendant vers les feuilles Exemple : Vt = {id, *, +} Vn = {E, T, F} S = E P = { E T, E E+T, T F, T T*F, F id } La phrase p à analyser est id + id * id Une séquence de dérivations permettant d obtenir p est la suivante E E + T T + T F + T id + T id + T * F id + F * F id + id * F id + id + id 21 Analyse ascendante On commence à partir de p et on essaye de remonter, par réductions (règles appliquées à l envers) successives, au symbole de départ S Si on arrive à obtenir S, alors p est correcte (syntaxiquement) Autrement dit, il s agit de construire l arbre syntaxique : - en commençant par les feuilles - en remontant vers la racine Exemple : on reprend le même exemple précédent Voici une séquence de réductions permettant d obtenir le symbole de départ E id + id * id F + id * id T + id * id E + id * id E + F * id E + T * id E + T * F E + T E 22 11