Examen de Compilation



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

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

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

Cours de Programmation 2

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

Les structures de données. Rajae El Ouazzani

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

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

Licence Sciences et Technologies Examen janvier 2010

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

Algorithmique, Structures de données et langage C

Architecture des ordinateurs

Programmation système I Les entrées/sorties

Cours 1 : La compilation

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Les structures. Chapitre 3

Conventions d écriture et outils de mise au point

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

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Analyse de sécurité de logiciels système par typage statique

Quelques éléments de compilation en C et makefiles

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

ADAPT: un modèle de transcodage des nombres. Une application des systèmes de production au développement

Compression de Données - Algorithme de Huffman Document de Conception

Algorithmique et Programmation, IMA

Le prototype de la fonction main()

Structure d un programme

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

Introduction au langage C

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours d Algorithmique et de Langage C v 3.0

Chapitre 1 : La gestion dynamique de la mémoire

Introduction à la programmation concurrente

Interpréteur d algèbre relationnelle

OS Réseaux et Programmation Système - C5

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)

SUPPORT DE COURS. Langage C

Génération de code binaire pour application multimedia : une approche au vol

Le langage C. Séance n 4

Les arbres binaires de recherche

Programmation en langage C

Machines virtuelles fonctionnelles (suite) Compilation ML Java

ALGORITHMIQUE ET PROGRAMMATION En C

Cours Langage C/C++ Programmation modulaire

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Java Licence Professionnelle CISII,

Pensez à vous inscrire... si ce n est pas encore fait

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

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

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Représentation d un entier en base b

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Architecture des ordinateurs

Programmation client-serveur sockets - RPC

Chap III : Les tableaux

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

Algorithmique I. Algorithmique I p.1/??

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

V- Manipulations de nombres en binaire

Claude Delannoy. 3 e édition C++

Exécutif temps réel Pierre-Yves Duval (cppm)

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

Cours 1 : Qu est-ce que la programmation?

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Flux de données Lecture/Ecriture Fichiers

Outils pour la pratique

Le langage C. Introduction, guide de reference

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

Rappels Entrées -Sorties


Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

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

Playing with ptrace() for fun and profit

INITIATION A LA PROGRAMMATION

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Derrière toi Une machine virtuelle!

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Arguments d un programme

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

Cours de programmation avancée. Le langage C. Université du Luxembourg

Création et Gestion des tables

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

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

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

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

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

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

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

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

ACTIVITÉ DE PROGRAMMATION

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

Générer un analyseur avec Flex&Bison

Cours Programmation Système

Transcription:

Examen de Compilation Licence Informatique 3 3 Mai 2013 Le sujet est composé de 4 exercices indépendants. Aucun document n est autorisé. Durée de l épreuve : 0x78 minutes. La note finale tiendra trés largement compte de la présentation. 1 Automate Dans l ensemble {0, 1} un mot binaire x n x n 1... x 1 représente la valeur entière n i=1 x i2 i 1. Conformément à l usage un nombre binaire est un mot commençant par la lettre 1 ou bien égal à 0. Contruire les automates pour reconnaitre : 1. le langage des mots de valeur multiple de trois. 2. le langage des mots 0 + 1{0, 1}. 3. le langage des nombres multiple de 3. 1

2 Théorie des langages Dans l ensemble {a, b}, on condidère le langage X des mots contenant un nombre de a supérieur ou égal à celui de b. 1. Donner la définition de l équivalence de Nérode entre deux états d un automate. Si F désigne l ensemble des états finaux d un automate deux états accessibles x et y sont équivalents si et seulement w {a, b}, x.w F y.w F 2. Montrer que X n est pas régulier. Indication : étudier l équivalence de Nérode entre les états q i (i entier) obtenus par la lecture du mot a i à partir de l état initial. Avec ces notations, pour i < j, nous avons q j b j F car a j b j est un mot du langage, mais q i b j F car a i b j contient plus de b que de a. Un hypothétique AFND aurait un nombre infini d états : c est absurde. 3 Ambiguité On considère la grammaire X a X X a X b X ɛ 1. Décrire le langage des mots reconnus. Le langage des mots de la forme a m b n avec m n. 2. Montrer que la grammaire est ambiguë. aab possède deux arbres syntaxiques. 3. Proposer une sémantique pour fixer l ambiguité. Comme dans le cas du si alors sinon, il suffit de faire correspondre chaque b au a le plus proche sur la gauche. 4. En déduire une grammaire non ambiguë. 4 flex-bison X O F O a X F a F b F ɛ Le jeu d instruction d une machine similaire à milxi est partiellement décrit ci-dessous. Un compilateur est implanté au travers des codes scan.l et parse.y, il produit du code d assemblage à partir d un langage évolué. READ x mem[x] := lecture WRITE x écrire mem[x] LOAD x ACC := mem[x] STO x mem[x] := ACC ADD x ACC += mem[x] MUL x ACC *=mem[x] CONST x ACC := x STOP arrêt 1. Préciser les phases de compilation effectivement présentes dans ces codes. Analyse lexicale, analyse syntaxique, gestion de symbole, production de code. 2

2. Donner un makefile pour compiler une commande minias à partir de ces sources. a l l : minias minias : scan. o parse. o gcc scan. o parse. o o minias l f l scan. o : parse. c scan. l f l e x o scan. c scan. l gcc Wall g c scan. c parse. c : parse. y bison dv parse. y o parse. c parse. o : parse. c gcc Wall g c parse. c demo : prog. as minias. / minias < prog. as c l e a n : rm f. o. c ~ 3. Quel sera le résultat de./minias < prog.as où prog.as est un fichier texte dont le contenu, écrit ici sur trois colonnes, est : var x var y var z input x input y z := ( x+y ) ( x+y ) output z READ 0 READ 1 LOAD 0 ADD 1 STO 3 LOAD 0 ADD 1 STO 4 LOAD 3 MUL 4 STO 3 LOAD 3 STO 2 WRITE 2 4. Quelles modifications faut-il effectuer pour gérer une instruction d arrêt STOP. Ligne 40 de scan.l, ajouter STOP return STOP. Dans le parseur ajouter STOP dans la déclaration des tokens. En ligne 45, ajouter la production : STOP { printf("stop") ; } 5. Quelles modifications faut-il effectuer pour gérer les constantes. Ligne 44 de scan.l, ajouter yylval=atoi(yytext) ;. Dans le parseur ajouter CONST dans la déclération des tokens. En ligne 45, ajouter la production : CONST NB { printf("const %d", $2) ; } 3

scan.l 24 value++; 25 t s = x ; 1 %{ 26 return x >val ; 2 #include " parse. h " 27 } 3 28 4 int value = 0 ; 29 %} 5 typedef struct _symb_ { 30 6 int val ; 31 %% 7 char key ; 32 " := " return AFF; 8 struct _symb_ next ; 33 "+" return ADD; 9 } enrs, symb ; 34 " ; " return NL; 10 symb t s = NULL; 35 " " return MUL; 11 int i n s e r t ( char k ) 36 " ( " return PG; 12 { 37 " ) " return PD; 13 symb x ; 38 " var " return VAR; 14 x = t s ; 39 " input " return IN ; 15 while ( x ) { 40 " output " return OUT; 16 i f ( strcmp ( x >key, k ) == 0 ) 41 [ a z ]+ { y y l v a l = i n s e r t ( yytext ) ; 17 return x >val ; 42 return ID ; 18 x = x > next ; 43 } 19 } 44 [0 9]+ return NB; 20 x = malloc ( sizeof ( enrs ) ) ; 45 \n return NL; 21 x >key = strdup ( k ) ; 46. ; 22 x >next = t s ; 47 %% 23 x >val = value ; parse.y 1 %{ 2 #include <s t d i o. h> 3 int used [ 6 4 ] = {0}; 4 int g e t r e g ( void ) { 5 int r = 0 ; 6 while ( used [ r ] ) r++; 7 used [ r ] = 1 ; 8 return r ; 9 } 10 void ungetreg ( int n ) { 11 i f ( used [ n ] == 1 ) 12 used [ n ] = 0 ; 13 } 14 extern int yylex ( void ) ; 15 int y y e r r o r ( char msg ) ; 16 17 %} 18 19 %token ID NB VAR NL AFF 20 %token IN OUT PG PD 21 %l e f t MUL 22 %l e f t ADD 23 24 %% 25 26 PROG : DECL LIST 27 DECL : VAR ID NL 28 { used [ $2 ] = 2 ; } DECL 29 / empty / 30 ; 31 LIST : INSTR NL LIST 32 / empty / 33 ; 34 INSTR : ID AFF EXP { 35 p r i n t f ( " \nload %d ", $3 ) ; 36 p r i n t f ( " \nsto %d ", $1 ) ; 37 ungetreg ( $3 ) ; 38 } 39 IN ID { 40 p r i n t f ( " \nread %d ", $2 ) ; 41 } 42 OUT ID { 43 p r i n t f ( " \nwrite %d ", $2 ) ; 44 } 45 ; 4

46 EXP : EXP ADD EXP { 62 PG EXP PD { $$ = $2 ; } 47 p r i n t f ( " \nload %d ", $1 ) ; 63 ID { $$ = $1 ; } 48 p r i n t f ( " \nadd %d ", $3 ) ; 64 ; 49 ungetreg ( $1 ) ; 65 50 ungetreg ( $3 ) ; 66 %% 51 $$ = g e t r e g ( ) ; 67 52 p r i n t f ( " \nsto %d ", $$ ) ; 68 int main ( void ) 53 } 69 { 54 EXP MUL EXP { 70 yyparse ( ) ; 55 p r i n t f ( " \nload %d ", $1 ) ; 71 return 0 ; 56 p r i n t f ( " \nmul %d ", $3 ) ; 72 } 57 ungetreg ( $1 ) ; 73 58 ungetreg ( $3 ) ; 74 int y y e r r o r ( char msg) { 59 $$ = g e t r e g ( ) ; 75 p r i n t f ( "%s ", msg ) ; 60 p r i n t f ( " \nsto %d ", $$ ) ; 76 return 0 ; 61 } 77 } 5