Survol de notions de compilation

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

Compilation (INF 564)

Organigramme / Algorigramme Dossier élève 1 SI

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

Cours Informatique Master STEP

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

Cours de Programmation 2

Les structures de données. Rajae El Ouazzani

Algorithmique et Programmation, IMA

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Initiation à l algorithmique

Cours 1 : La compilation

Présentation du PL/SQL

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

Cours d algorithmique pour la classe de 2nde

Java Licence Professionnelle CISII,

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique & programmation

Enseignement secondaire technique

OCL - Object Constraint Language

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

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

Évaluation et implémentation des langages

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

Arbres binaires de recherche

Théorie de la Programmation

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

Corrigé des TD 1 à 5

L informatique en BCPST

Examen Médian - 1 heure 30

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

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

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

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

Algorithmes et programmation en Pascal. Cours

Algorithmique et programmation : les bases (VBA) Corrigé

Introduction à MATLAB R

Programmer en JAVA. par Tama

Encryptions, compression et partitionnement des données

Présentation du langage et premières fonctions

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Cours d Algorithmique et de Langage C v 3.0

Application 1- VBA : Test de comportements d'investissements

Les structures. Chapitre 3

1. Structure d'un programme FORTRAN 95

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

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

Logiciel Libre Cours 2 Fondements: Programmation

Formula Negator, Outil de négation de formule.

as Architecture des Systèmes d Information

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

Préparation à l examen EFA en Macro

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

TRIGONOMETRIE Algorithme : mesure principale

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)

Recherche dans un tableau

Découverte de Python

TP1 : Initiation à Java et Eclipse

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Rappels d architecture

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Programmation C. Apprendre à développer des programmes simples dans le langage C

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

Utilisation d objets : String et ArrayList

Vue d ensemble de Windows PowerShell

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

VOS PREMIERS PAS AVEC TRACENPOCHE

Vérification de programmes et de preuves Première partie. décrire des algorithmes

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

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

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

ACTIVITÉ DE PROGRAMMATION

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

Introduction au langage C

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;


Le langage C. Introduction, guide de reference

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

Gestion mémoire et Représentation intermédiaire

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

ALGORITHMIQUE ET PROGRAMMATION En C

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

SUPPORT DE COURS. Langage C

Conception de circuits numériques et architecture des ordinateurs

INFO-F-105 Language de programmation I Séance VI

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

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

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

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

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

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Programmation C. J.-F. Lalande. 15 novembre 2012

Paris Airports - Web API Airports Path finding

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Transcription:

Survol de notions de compilation Chapitre 2 Sections 2.1, 2.2, 2.4 IFT-3101 Compilation et interprétation Révision hiver 2013 p. 1

* Contenu * Description des langages de programmation Grammaires hors-contexte Ambiguïté Associativité et priorité des opérateurs Analyse syntaxique Analyse descendante IFT-3101 Compilation et interprétation Révision hiver 2013 p. 2

Survol Les langages de programmation sont normalement décrits sous deux aspects: leur syntaxe: l apparence des programmes et leur sémantique: la signification des programmes. La syntaxe des langages peut être décrite clairement et simplement grâce aux grammaires hors-contexte. (Les expressions régulières contribueront aussi plus tard à la description de la syntaxe.) Habituellement, la sémantique des langages ne peut pas être décrite à la fois clairement et simplement. La plupart du temps, la sémantique est donnée de façon informelle et est clarifiée à l aide d exemples. Les grammaires hors-contexte ont un deuxième rôle. Elles peuvent aussi servir de cadre à l élaboration d une technique de compilation appelée traduction orientée-syntaxe. Nous découvrons comment développer un compilateur à l aide de ces techniques et qui traduit des expressions simples de la notation infixe (par ex., 9-5+2) à la notation postfixe (95-2+). IFT-3101 Compilation et interprétation Révision hiver 2013 p. 3

Définition de la syntaxe Les grammaires hors-contexte sont utilisées pour décrire la syntaxe des langages de programmation. Par exemple, si on dit qu un énoncé if de C est de la forme: if ( expression ) statement else statement alors on peut exprimer ce fait à l aide d une règle: stmt if ( expr ) stmt else stmt appelée production où stmt et expr sont des symboles non-terminaux et les autres symboles sont terminaux. Une grammaire hors-contexte possède: 1. un ensemble de jetons, les terminaux; 2. un ensemble de non-terminaux; 3. un ensemble de productions, où chacune est une règle constituée d un non-terminal à gauche d une flèche et d une suite de 0 ou plus symboles terminaux ou non-terminaux à droite; et 4. un non-terminal désigné comme étant le symbole de départ. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 4

Exemple 2.1 La grammaire suivante permet de définir le langage des suites de chiffres séparés par des signes d addition ou de soustraction, tels que 9-5+2, 3-1 et 7. list list + digit list list - digit list digit digit 0 1 2 3 4 5 6 7 8 9 Le langage généré par la grammaire hors-contexte est l ensemble des chaînes de terminaux obtenues par substitution répétitive d un nonterminal par le membre droit d une de ses productions et en ayant débuté par le symbole de départ. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 5

Exemple 2.2 On peut justifier le fait que la chaîne 9-5+2 est une list par ce raisonnement: 1. 9 est une list car 9 est un digit (3ème production); 2. 9-5 est une list car 9 est une list et 5 est un digit (2ème production); et 3. 9-5+2 est une list car 9-5 est une list et 2 est un digit (1ère production). L arbre de dérivation suivant résume le raisonnement: list list digit list digit digit 9-5 + 2 IFT-3101 Compilation et interprétation Révision hiver 2013 p. 6

Autre exemple De façon similaire, on peut décrire la syntaxe des blocs d énoncés de Pascal. Ceux-ci sont une suite (possiblement vide) d énoncés séparés par des points-virgules, le tout encadré par deux mots-clé. block begin opt stmts end opt stmts stmt list ǫ stmt list stmt list ; stmt stmt La chaîne vide est dénotée par le méta-symbole ǫ. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 7

Arbres de dérivation Un arbre de dérivation indique de quelle façon une chaîne est dérivable à partir d une grammaire hors-contexte. S il existe une production A XYZ, alors un arbre de dérivation peut contenir un noeud interne étiqueté A doté de trois enfants étiquetés X, Y et Z, dans l ordre. A X Y Z Étant donné une grammaire hors-contexte, un arbre de dérivation a les propriétés suivantes: 1. La racine est étiquetée avec le symbole de départ. 2. Chaque feuille est étiquetée avec un terminal. 3. Chaque noeud interne est étiqueté avec un non-terminal. 4. Si A est l étiquette d un noeud interne et que X 1, X 2,..., X n sont les étiquettes de ses enfants dans l ordre, alors il existe une production A X 1 X 2...X n. Exceptionnellement, unnoeud internepeut posséderun seulenfant étiquetéavecǫs ilexiste uneproductiona ǫ. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 8

Ambiguïté On ne peut pas toujours parler de l arbre de dérivation d une chaîne. Parfois, il en existe plus qu un pour une même chaîne. Par exemple, on peut aussi bien générer les listes de chiffres séparés par des opérateurs à l aide de la grammaire suivante: string string + string string string - string string 0 1 2 3 4 5 6 7 8 9 Il existe deux arbres de dérivation pour la chaîne 9-5+2: string string + string string - string 2 9 5 string string - string 9 string + string 5 2 On dit qu une telle grammaire est ambiguë. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 9

Associativité des opérateurs Par convention, les opérateurs arithmétiques +, -, * et / sont associatifs à gauche. Notre grammaire qui utilise list gère correctement l associativité des additions et des soustractions. Un opérateur qui est associatif à droite est l opérateur d affectation en C et en Java. Voici un fragment de grammaire qui gère correctement l associativité de cet opérateur: right letter = right letter letter a b z IFT-3101 Compilation et interprétation Révision hiver 2013 p. 10

Priorité des opérateurs On pourrait facilement étendre notre grammaire basée sur list pour qu elle comprenne les opérateurs de multiplication et de division. Dans ce cas, comment interpréterait-on 9+5*2? Comme (9+5)*2 ou comme 9+(5*2)? On veut clairement la deuxième interprétation à cause de la priorité des opérateurs. Voici une grammaire qui tient compte à la fois de l associativité et de la priorité des opérateurs. Elle ajoute aussi les expressions entre parenthèses. expr expr + term expr - term term term term * factor term / factor factor factor digit ( expr ) IFT-3101 Compilation et interprétation Révision hiver 2013 p. 11

Priorité et associativité en C C-Operators in Order of Precedence Operator Description Associativity () Function call Left to right [] Array element -> Structure member pointer reference. Class, structure or union member reference sizeof Storage size in bytes of object / type ++ Postfix Increment -- Postfix Decrement ++ Prefix Increment Right to left -- Prefix Decrement - Unary minus + Unary plus! Logical negation ~ One s complement & Address of * Indirection (type) Type conversion (cast) Right to left * Multiplication Left to right / Division % Modulus + Addition Left to right - Subtraction << Bitwise left shift Left to right >> Bitwise right shift < Scalar less than Left to right <= Scalar less than or equal to > Scalar greater than >= Scalar greater than or equal to == Scalar equal to Left to right!= Scalar not equal to & Bitwise AND Left to right ^ Bitwise exclusive OR Left to right Bitwise inclusive OR Left to right && Logical AND Left to right Logical inclusive OR Left to right?: Conditional expression Right to left = Assignment Right to left += -= *= Assignment /= %= &= Assignment ^= = Assignment <<= >>= Assignment, Comma Left to right Adapted from: http://www.mattmarsh.net/computing/download/cprec.doc Source: http://www.ee.unb.ca/tervo/cmpe3221/c precedence.pdf IFT-3101 Compilation et interprétation Révision hiver 2013 p. 12

Syntaxe des énoncés les plus communs Voici une grammaire (ambiguë) qui génère des énoncés à la Pascal: stmt id := expr stmt if expr then stmt stmt if expr then stmt else stmt stmt while expr do stmt stmt begin opt stmts end opt stmts stmt list ǫ stmt list stmt list ; stmt stmt IFT-3101 Compilation et interprétation Révision hiver 2013 p. 13

L analyse syntaxique: Analyse syntaxique (1) consiste à déterminer si une chaîne est générée par une grammaire hors-contexte; consiste du même coup à construire (explicitement ou non) un arbre de dérivation pour la chaîne; peut se faire à l aide d algorithmes généraux qui fonctionnent en temps O(n 3 ) où n est le nombre de jetons, ce qui est trop coûteux pour le domaine de la compilation; peut se faire en temps linéaire à condition que la grammaire respecte certaines conditions. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 14

Analyse syntaxique (2) Caractéristiques des méthodes efficaces: les méthodes efficaces peuvent presque toutes être classées parmi les méthodes ascendantes ou descendantes; les méthodes ascendantes consistent à montrer comment, en faisant un assemblage à partir de la chaîne de jetons, on peut la réduire au symbole de départ; les méthodes descendantes consistent à montrer comment on peut effectuer des substitutions à partir du symbole de départ pour produire la chaîne de jetons (dérivation habituelle); les méthodes ascendantes sont plus complexes mais peuvent accommoder une variété plus grande de grammaires. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 15

Analyse descendante Cette méthode d analyse consiste à déterminer, au fur et à mesure que la dérivation générant la chaîne est découverte, quelle est la prochaine production que l on doit utiliser. Par exemple, pour la grammaire suivante, il est facile de découvrir quelle est la bonne production à utiliser. type simple id array [ simple ] of type simple integer char num dotdot num L analyse syntaxique descendante est prédictive lorsqu on peut déterminer la bonne production à utiliser en n inspectant qu un nombre fini de jetons à l avance (l horizon ou le lookahead ). Voir les fonctions FIRST et FOLLOW du chapitre 4. IFT-3101 Compilation et interprétation Révision hiver 2013 p. 16