3 Grammaires et Attributs

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

ARBRES BINAIRES DE RECHERCHE

Les structures de données. Rajae El Ouazzani

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)

Les arbres binaires de recherche

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

Définitions. Numéro à préciser. (Durée : )

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

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

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

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

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

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

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

Initiation à la Programmation en Logique avec SISCtus Prolog

STAGE IREM 0- Premiers pas en Python

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

V- Manipulations de nombres en binaire

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

Approche Contract First

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

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

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

Rappels d architecture

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

TP1. Outils Java Eléments de correction

Chap III : Les tableaux

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

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

Cours 1: Java et les objets

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

Arbres binaires de recherche

ACTIVITÉ DE PROGRAMMATION

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

Cours 1 : Qu est-ce que la programmation?

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

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

TP3 : Manipulation et implantation de systèmes de fichiers 1

Programmer en JAVA. par Tama

TP, première séquence d exercices.

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TP1 : Initiation à Java et Eclipse

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Conventions d écriture et outils de mise au point

Programmation par les Objets en Java

GOL502 Industries de services

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

Informatique Générale

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

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

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

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

Utilisation d objets : String et ArrayList

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

Chapitre 1 Qu est-ce qu une expression régulière?

LES TYPES DE DONNÉES DU LANGAGE PASCAL

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

Rappels sur les suites - Algorithme

La mémoire. Un ordinateur. L'octet. Le bit

Java Licence Professionnelle CISII,

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

Le langage SQL Rappels

Traduction des Langages : Le Compilateur Micro Java

Tp 1 correction. Structures de données (IF2)

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

TP : Gestion d une image au format PGM

OCL - Object Constraint Language

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

IV- Comment fonctionne un ordinateur?

Chapitre 10 Arithmétique réelle

ALGORITHMIQUE ET PROGRAMMATION En C

Architecture des ordinateurs

Représentation d un entier en base b

Générer du code à partir d une description de haut niveau


Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Chapitre VI- La validation de la composition.

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Fascicule u7.05 : Impression de résultat pour visualisation

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

Remote Method Invocation (RMI)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours 1 : La compilation

Gestion mémoire et Représentation intermédiaire

Représentation des Nombres

INITIATION AU LANGAGE JAVA

Héritage presque multiple en Java (1/2)

Environnements de développement (intégrés)

Les suites numériques

Le prototype de la fonction main()

Cours d Algorithmique et de Langage C v 3.0

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

Notions fondamentales du langage C# Version 1.0

Solutions du chapitre 4

Introduction à NetCDF

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Transcription:

3 Grammaires et Attributs Les grammaires attribuées (à la Yacc) servent à construire de nouvelles structures, découvrir des caractéristiques des expressions analysées, calculer des valeurs,... durant l analyse syntaxique. Dans un compilateur, elles servent à construire l arbre syntaxique abstrait (AST) Exercice 9 [Évaluation d expressions préfixées] Source : www.irisa.fr/lande/ridoux/ens/comp/td/sujet_td3et4.pdf. 1. On considère la grammaire suivante qui décrit les expressions arithmétiques préfixées binaires : exp > chiffre (+ exp exp) (* exp exp) chiffre > 0 1... 9 Attribuer cette grammaire de façon à calculer la valeur de l expression analysée. Vérifier sur un exemple. 2. On généralise cette grammaire pour décrire maintenant les expressions n aires préfixées : exp > chiffre (+ exp sexp) (* exp sexp) sexp > exp sexp chiffre > 0 1... 9 Construire l arbre de dérivation de + ( 2 3 ) 4 3. Attribuer cette nouvelle grammaire de façon à là encore calculer la valeur de l expression analysée. Correction : 1. Expressions binaires. Chacun des non terminaux va avoir un S attribut de type entier, qui sera sa valeur entière. Les attributs étant tous calculés des fils vers le père, ce sera une grammaire S attribuée. Il reste à écrire les règles de calcul : chiffre chiffre val entier exp exp val entier exp0 >(*exp3 exp4) {exp0 val exp3 val * exp4 val Les autres régles sont similaires. Vérification rapide sur (+2( 38)). 2. Expressions n aires. Là encore, les attributs vont être des entiers : chiffre chiffre val entier exp exp val entier

On commence à écrire les règles : exp0 >(*exp3 sexp) {exp0 val exp3 val * sexp val sexp >exp {sexp val sexp val Jusque là, tout va bien, sauf que lorsque l on regarde la règle sexp >exp sexp, on ne sait pas si il faut additionner ou multiplier. On va donc ajouter un H attribut (hérité) pour donner l information du père vers les fils que le sexp que l on est en train de dériver provient d un + ou un * : l attribut sexp op qui sera un entier (1 si +, 2 si *) par exemple. Il reste à modifier les règles pour prendre en compte ce nouvel attribut hérité : exp0 >(*exp3 sexp) {exp0 val exp3 val * sexp val ; sexp op 2 sexp >exp {sexp val sexp val sexp0 >exp sexp2 {sexp val exp val sexp2 val, + si sexp0 op == 1 =, sinon sexp2 op sexp0 op Exercice 10 et ensuite, on laisse la magie opérer! [Évaluation des nombres flottants] On considère la grammaire pour l écriture des nombres flottants : S > X E D X > + eps E > BE B B > 0 1... 9 D >.E S attribuer la grammaire pour calculer la valeur d un mot de L(G). Même question mais avec un ou plusieurs attribus hérités. Correction : En attente du source d erwan Exercice 11 [Réécriture d une expression sous forme préfixée] On considère la grammaire des expressions arithmétiques (simples) suivante : E F T > E + F F > F * T T > (E) id

Attribuer la grammaire pour réécrire l expression sous forme préfixée. La chaîne 2+5*8 se réécrira donc en la chaîne + 2 5 8. Vérifier que les attributs font bien ce que l on veut dans le cas de la chaîne ( 2 + 5 ) 8. Correction : Cette fois les attributs ne sont plus des entiers, mais vont être des chaînes de caractères, que l on va concaténer à l aide de l opérateur ^ : Et donc, les règles : E E val string F F val string T T val string T >id T >E F >T F >F*T {T val id {T val ) ^E val^ ) {T val ) ^E val^ ) {F val *F val^ ^T val Exercice 12 [Construction de l arbre abstrait] Soit L le langage décrit par la grammaire suivante : E F T > E + F F > F * T T > (E) id Attribuer la grammaire pour construire l arbre de l expression. On suppose que l on dispose des fonctions suivantes : creernoeud : id > Arbre qui construit l arbre Noeud(id). creerarbre : val,fd,fg > Arbre qui construit l arbre de racine val et fd,fg les deux sousarbres. Correction : En attente du source d Erwan Exercice 13 [Recherche de profondeur de définition] Source : www.irisa.fr/lande/ridoux/ens/comp/td/sujet_td3et4.pdf On considère les programmes décrits par la grammaire suivante : programme > bloc bloc > {dec ; sint dec > TKVAR suite ident suite ident > ident,suite ident ident sinst > opcode (suite arg) bloc suite arg > suite arg,ident ident

où ident et opcode désignent respectivement un identificateur quelconque non réservé et un identificateur de fonction prédéfinie, et TKVAR le mot clef «var». Donner quelques exemples de programmes. On souhaite associer à chaque occurrence d identificateur sa profondeur ( 1) et son rang ( 1) de déclaration. Ainsi, sur l exemple suivant : { var a,b,c ; // a(1,1), b(1,2), c(1,3) f1(a,c) ; // a(1,1), c(1,3) { var d,b ; f2(d,c,b); { var e,b,a; // e(2,1)...... on fait figurer le couple (profondeur, rang) correspondant à chacune des occurences. Donner un système d attributs permettant d associer à chaque occurrence de déclaration de variable, la profondeur du bloc où elle est déclarée et le rang de cette variable dans sa liste de déclaration. Donner un système d attributs permettant d associer à chaque occurrence de d utilisation d un identificateur la profondeur et le rang de déclaration de cet identificateur. Correction : TODO Exercice 14 [Vérification de contraintes] En Lisp, on définit les arbres à l aide de la grammaire suivante : arbre () int arbre arbre 1. À quel arbre correspond «naturellement» l expression 4 ( 3 () () ) ( 7 () () )? 2. Attribuer la grammaire pour vérifier qu un tel arbre est un arbre binaire de recherche. (Chaque nœud de chaque sous arbre droit est plus petit que la racine, qui est elle même plus petite que chaque feuille du sous arbre droit). Correction : On invente un attribut booléen isabr qui sera vrai ssi l arbre en question est un ABR. Il va être un S Attribut parce que l on utilise les infos des sous arbres pour remonter l information. Il faut aussi rajouter un attribut pour remonter l information maximum et minimum de l arbre, afin de pouvoir tester (remarque, un seul attribut qui serait la racine de l arbre ne fonctionne pas, pourquoi?). On prend donc les trois attributs S suivants : arbre arbre isabr booléen arbre arbre max entier arbre arbre min entier

Voici les règles associées arbre > () arbre0 > int arbre2 arbre3 arbre isabr true arbre max. arbre min +. arbre0 isabr arbre2 isabr and arbre3 isabr and int<arbre2 max and int>arbre3 max Il resterait à faire en sorte de surcharger les comparaisons afin qu elles prennent en compte +/.