Thème 4 : Table des symboles

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

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

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

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

ACTIVITÉ DE PROGRAMMATION

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

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

Conventions d écriture et outils de mise au point

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

IRL : Simulation distribuée pour les systèmes embarqués

Les structures. Chapitre 3

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Logiciel de base. Première année ENSIMAG

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

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

Introduction à la programmation concurrente

Encryptions, compression et partitionnement des données

Optimisations des SGBDR. Étude de cas : MySQL

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Programme awk------introduction rapide

Cours de Programmation 2

UE Programmation Impérative Licence 2ème Année

Initiation à la programmation en Python

Évaluation et implémentation des langages

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

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Programmation C++ (débutant)/instructions for, while et do...while

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

Traduction des Langages : Le Compilateur Micro Java

Chap III : Les tableaux

Algorithmique et Programmation, IMA

Introduction au langage C

Structure d un programme

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

Dossier projet isn 2015 par Victor Gregoire

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Compression Compression par dictionnaires

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Rappels Entrées -Sorties

Automatisation de l administration système

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours d initiation à la programmation en C++ Johann Cuenin

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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)

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

Java Licence Professionnelle CISII,

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Cours 1 : La compilation

COMPARAISONDESLANGAGESC, C++, JAVA ET

Exercices INF5171 : série #3 (Automne 2012)

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction à MATLAB R

IFT2255 : Génie logiciel

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

Les tableaux croisés dynamiques

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programme Compte bancaire (code)

A. À propos des annuaires

Les chaînes de caractères

DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Diagramme de classes

Théorie des Langages

Programmer en JAVA. par Tama

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Cours d Algorithmique et de Langage C v 3.0

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Urbanisation de système d'information. PLM 6 (Product Lifecycle Management) Collaboration et partage d'informations

Business & High Technology

CORBA haute performance

Gestion de base de données

Qualité du logiciel: Méthodes de test

Algorithmique, Structures de données et langage C

Approche Contract First

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Microsoft Hosted Exchange 2010 DOCUMENT D EXPLOITATION

Cours 1 : Qu est-ce que la programmation?

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Création et Gestion des tables

Les structures de données. Rajae El Ouazzani

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

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

Programmation MacOSX / ios

Pourquoi l apprentissage?

Présentation du langage et premières fonctions

Centre de Ressources pour les Evaluations (ERC) Guide d'utilisateur. Bureau d Evaluation, Septembre 2006

Préparation à l examen EFA en Macro

CHAPITRE 1. Introduction aux bases de données

Objets et Programmation. origine des langages orientés-objet

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Mesurer les performances (CPU) sous Linux

Transcription:

Compilation : théorie, techniques et outils Thème 4 : Table des symboles HABIB ABDULRAB (INSTITUT NATIONAL DES SCIENCES APPLIQUÉES DE ROUEN) CLAUDE MOULIN (UNIVERSITÉ DE TECHNOLOGIE DE COMPIÈGNE) SID TOUATI (UNIVERSITÉ DE VERSAILLES SAINT-QUENTIN EN YVELINES)

Table des matières Objectifs 5 I - Table des symboles 7 A.Table des symboles...7 II - Identification 9 A.Identification...9 B.Structure de hachage...9 C.Identification...10 D.Interface simple...10 E.Identification...11 III - Portée d'un identificateur 13 A.La portée d'une déclaration...13 B.TS structurée en portée...14 C.TS structurée en portée avec table associative...15 IV - Surcharge d'un identificateur 17 A.Surcharge...17 B.Identification avec surcharge...17 C.Réduction des définitions...17 V - Portées importées 19 A.Spécification d'une portée...19 B.Importation des portées...19 C.Implémentation de l'importation des portées...20 Conclusion 21 3

Objectifs Structure de données centrale dans un compilateur. Implémentations efficaces, interfaces, etc. Lectures conseillées : Aho, Sethi et Ullman : chapitre 7.6 Compilateurs : chapitres 2.1.11 et 6.1 5

Table des I - symboles I Table des symboles 7 A.Table des symboles Elle centralise les informations sémantiques des identificateurs d'un programme : - pour une variable : nom, type, taille, etc. - pour un type : nom, types de base, etc. - pour un tableau : nom, dimension, etc. - pour une fonction : type, nb de paramètres, etc. Rien n'interdit d'avoir plusieurs tables de symboles - en fonction de la nature des ids : table des types, etc. - en fonction des blocs du programme (portée des déclarations). 7

II - Identification II Identification 9 Structure de hachage 9 Identification 10 Interface simple 10 Identification 11 A.Identification C'est le processus de retrouver la définition (dans la table de symbole) d'un identificateur donné. La TS fournit les informations sur un identifiant: sa nature, son type, valeur initiale, propriétés d'allocation, etc. L'accès à la TS doit être rapide, d'où l'utilisation des tables de hachage en général. Elle est indexée par le nom de l'id (chaîne de car). Dans certains compilateurs, les mots clés du langage ne font pas partie de la syntaxe, mais ils sont insérés dans la table des symboles. L'utilisation des tables de hachage permet d'avoir un accès avec une complexité presque constante en fonction du nombre des symboles (à condition que la fonction de hachage soit bien choisie). On peut également utiliser d'autres structures : listes, arbres, tableaux, etc. B.Structure de hachage 9

Identification "pi" P "droite" P Une bonne fonction de hachage doit équilibrer les sous listes "my_int" P "bleu" P "faux" P "printf" P "signal" P "toto" P Table de hachage indexée par le nom clé propriétés Graphique 1 Structure de hachage Le nom d'un id est une chaîne de caractère qui sert à indexer l'accès. Si f est la fonction de hachage, et str est le nom de l'id, alors f(str) donne le numéro de la liste où doit résider l'entrée de l'id. Les propriétés d'un id peuvent être des structures de données très complexes (arbres, tables, listes, champs, etc.)! C.Identification Lors d'une définition d'un id, on insère une entrée dans la TS : la déclaration d'un id est unique en générale (on étudiera la surcharge par la suite). Lors d'une utilisation d'un id dans le programme, on cherche l'entrée correspondante dans la TS. Dans certains compilateurs, les mots clés du langage ne font pas partie de la syntaxe, mais ils sont insérés dans la table des symboles. D.Interface simple Comme toute structure de données, il faut d'abord concevoir la structure d'une entrée dans la TS: les informations attachées à un id. Deux fonctions de base: insertion, recherche d'un id. Autres : modification, suppression,... 10

Identification La modification d'un nœud dans la TS s'effectue pendant l'analyse du programme pour compléter au fur et à mesure les informations sur un symbole. La suppression d'un id est rarement utilisée. Si un id n'est plus utilisé dans un programme, rien n'empêche de le laisser dans la TS. S'il est redéfini (re-déclaré), on peut utiliser des mécanismes de surcharge pour le modifier dans la TS. E.Identification Tous les id ne sont pas recherchés dans les mêmes espaces de noms. En général, la position syntaxique d'un id détermine son espace - variable, nom de fonction : espace général - nom d'un champ (struct) : espaces spéciaux struct un_entier { int i ; recherché dans l'espace des noms de i } i ; recherché dans l'espace général Les espaces de noms peuvent être vues comme des tables de symboles distinctes. Le langage définit en général les différents espaces de noms possible. Par ex, le langage C définit 3 espaces principaux de noms: espace des noms des types énumérés : typedef, union étiquettes (labels) le reste : variables, fonctions, types, ids des valeurs d'énumération. En plus, à chaque type struct, il lui attache un espace de nom spécial qui ne contient que les identificateurs des champs. 11

Portée d'un III - identificateur III La portée d'une déclaration 13 TS structurée en portée 14 TS structurée en portée avec table associative 15 A.La portée d'une déclaration Les quatre identifiants i référencent-ils la même variable? Comment gérer la portée des noms dans un compilateur? int i(){ int i; if( ){ int i; i= { int i; i= ; } x=i; } i= } Graphique 2 Portée d'une déclaration 13

Portée d'un identificateur La déclaration visible d'un identificateur est celle qui se trouve dans le bloc englobant le plus interne. B.TS structurée en portée On utilise une pile de TS : lors de l'analyse d'un bloc dans un programme source, la TS du bloc est mise au sommet de la pile. L'identification d'un id se fait en parcourant les TS du sommet de la pile jusqu'à sa base. niveau 4 TS4 3 2 1 0 TS3 TS1 TS0 "pi" "my_int" "printf" "droite" "bleu" "signal" "faux" "toto" TS2 pile de portées Graphique 3 Table de symboles structurée en portée En C : niveau 0 : espace des bibliothèques niveau 1 : programme (déclaration des fonctions, variables globales) niveau 2 : paramètres formels niveau 3 : variables locales niveau 4 : bloc Avantage : simplicité - Lorsque le compilateur analyse un nouveau bloc de programme, une nouvelle TS est empilée. - La TS du bloc courant est dépilée lorsque le compilateur finit d'analyser le bloc. Inconvénient: - L'identification d'un nom peut être lente (accès à plusieurs TS successives). - La complexité du temps d'accès dépend du niveau d'imbrication. 14

Portée d'un identificateur C.TS structurée en portée avec table associative Une table associative centrale indexée par les noms des ids. Chaque entrée pointe sur une pile de définitions, le sommet de chaque pile est la définition la plus récente. Avantage - Identifications rapides. Inconvénient - Gestion des suppressions assez complexe. Elle nécessite une autre structure de données Quand on sort d'un bloc, le compilateur a besoin d'actualiser les déclarations visibles (portée des noms). Si on n'utilise que la table associative, on serait obligé de parcourir toutes les entrées de la table, car on manque d'information qui permet de retrouver la liste des ids déclarés à l'intérieur d'un bloc. 15

Portée d'un identificateur Pour accélérer la suppression des entrées (définitions), on utilise une pile de portées qui pointe sur toutes les déclarations d'une portée. Ainsi, à la sortie d'un bloc, il est facile de retrouver toutes les déclarations : la suppression des entrées dans la TS est accélérée. 16

Surcharge d'un IV - identificateur IV Surcharge 17 Identification avec surcharge 17 Réduction des définitions 17 A.Surcharge La surcharge permet de déclarer plusieurs fois le même identificateur. C'est une propriété que certains langages autorisent. Deux problèmes : - Le processus d'identification renvoie un ensemble de définitions au lieu d'une seule. - Comment résoudre l'ambiguïté (réduction de l'ensemble des définitions à une seule). B.Identification avec surcharge Il suffit simplement d'inclure toutes les déclarations (définitions) dans la TS. Une portée peut contenir donc plusieurs définitions du même ids. Évidemment, on parle de surcharge uniquement entre les ids du même espace de noms et de la même portée. C.Réduction des définitions Les règles de réduction des surcharges est dictée par le langage Il faut pouvoir analyser le contexte pour se retrouver dans le cas où une seule définition est possible. Exemple : en C++ et en ada, les noms des fonctions peuvent être surchargées. La réduction à une seule définition est possible. Elle se fait grâce à la comparaison entre les listes des paramètres. Si le processus de réduction ne se termine pas avec une et une seule définition, le 17

Surcharge d'un identificateur compilateur doit émettre une erreur. 18

V - Portées importées V Spécification d'une portée 19 Importation des portées 19 Implémentation de l'importation des portées 20 A.Spécification d'une portée La complexité du génie logiciel a fait exploser le nombre d'ids dans un programme. Pour éviter le risque d'avoir des collisions de noms très fréquemment, beaucoup de langages permettent de spécifier de nouvelles portées. Le C++ utilise x::toto et using namespace etc. B.Importation des portées La sémantique dépend du langage. C++ : x::toto - si plusieurs toto sont visible dans la portée courante, x::toto permet de sélectionner un seul. C++ : using namespace nom_espace - Permet d'inclure une nouvelle portée. - Similaire dans pascal et modula 2 : WITH nom_espace DO... END Modula 2 : FROM module IMPORT - fusionne les nouveaux noms dans la portée courante. - Similaire : use de ADA Ne pas confondre le mot clé namespace de C++, et le concept d'espace de noms en compilation. 19

Portées importées C.Implémentation de l'importation des portées Si une nouvelle portée est déclarée, on l'inclut dans la TS, comme si le compilateur entre dans un nouveau bloc. En revanche, si on insère de nouveaux noms à la portée courante, on peut provoquer des surcharges qu'il faut résoudre. Tout dépend du langage. 20

Conclusion Résumé : Une table de symbole est une centralisation des informations rattachées aux identificateurs d'un programme. Elle doit être bien conçue pour des accès rapides. Elle peut être très compliquée et devient très vite une machine à gaz. Rien n'interdit d'avoir plusieurs tables de symboles, il faut simplement savoir les gérer. 21