Vous êtes sur la page 1sur 5

UNIVERSITE DES SCIENCES ET DE LA TECHNOLOGIE HOUARI BOUMEDIENE U.S.T.H.B.

SII

Rapport TP Compilation

SAHRAOUI Djilali. Groupe 3 NOUACER Hacen Anis. Groupe 1

Rapport TP Compilation

1. Introduction :
Nous allons commencer par prsenter ce quest un compilateur : Un compilateur est un programme informatique qui traduit un langage (appel le langage source) en un autre (le langage cible), gnralement dans le but de crer un excutable. Un compilateur sert le plus souvent traduire un code source crit dans un langage de programmation en un autre langage, habituellement un langage d'assemblage ou un langage machine. Le programme en langage machine produit par un compilateur est appel code objet. Voici un schma qui reprsente la chaine de compilation dun code informatique :

Page 2

Rapport TP Compilation

2. Prsentation des outils utiliss lors de notre TP :


Flex : est un outil pour gnrer des analyseurs, programmes qui reconnaissent des motifs lexicaux
dans du texte. Il lit les fichiers d'entre donns, ou bien son entre standard si aucun fichier n'est donn, pour obtenir la description de l'analyseur gnrer. La description est une liste de paires d'expressions rationnelles et de code C, appeles rgles. En sortie, flex gnre un fichier source en langage C, appel `lex.yy.c', qui dfinit une routine `yylex()'. Ce fichier est compil et li avec l'option `-lfl' (correspondant la bibliothque flex) afin de produire un programme excutable. Quand l'excutable est lanc, il analyse son entre afin d'y trouver des occurrences correspondant aux prcdentes expressions rgulires. chaque expression trouve, il excute le code C correspondant.

Bison : est l'implmentation de l'analyseur syntaxique yacc par le projet GNU. Scnarios d'utilisation : L'utilisation d'un analyseur syntaxique s'impose sur du code crit par exemple en C ou C++ lorsqu'on a besoin de remplacer des classes ou autres rfrences par des adaptateurs, ou des appels de fonctions, ou partir d'autres classes et/ou fonctions. Dans ce schma, GNU Bison peut analyser le code source et remplacer toutes les instances de classes et les fonctions, y compris ses arguments. On peut par ailleurs associer Bison l'analyseur lexical Flex, version libre de Lex. Langages de programmation supports : GNU Bison peut gnrer du code C, C++ ou Java, lequel pourra par la suite tre compil.

3. Cration dun analyseur lexical :


Pour crer un analyseur lexical, il faut crer un fichier de spcification monfichier.l dont le format est le suivant :

%{ dclarations de variable et inclusion de bibliothques en C %} dfinitions : <identificateur><expression rgulire> ... %% rgles : <expression rgulire> {<commandes en C>} %% <programme principal et fonctions en C> Loutil flex gnre le code source en C de l'analyseur lexical partir du fichier de spcification qui leur est fourni en paramtre. Ce fichier par dfaut s'appelle lex.yy.c La commande pour gnrer le code C de l'analyseur est la suivante :

Page 3

Rapport TP Compilation
lex monfichier.l ou flex monfichier.l

Il reste compiler le code source pour obtenir un analyseur lexical excutable par la commande :
cc lex.yy.c -ll

L'option -ll lie le source C la bibliothque de lex ou flex.

L'analyseur lexical par dfaut lit l'entre standard. Il est possible de redfinir l'entre en modifiant la valeur de la variable yyin.

4. Cration dun analyseur syntaxique :


Pour crer un analyseur syntaxique, il faut crer un fichier monfichier.y dont le format est le suivant : %{ dclarations de variable et inclusion de bibliothques en C %} dfinitions %% rgles de rduction de la grammaire : symbole non terminal : liste de symboles {action 1 en C} | liste de symboles {action 2 en C} | ... ; %% <programme principal et fonctions en C>

Nous verrons exactement comment crire ce fichier en TP. Pour gnrer le code source C de l'analyseur syntaxique partir du fichier monfichier.y, il faut utiliser la commande suivante :
yacc monfichier.y ou bison monfichier.y

Loutil bison gnre un fichier C, nomm par dfaut y.tab.c permettant de raliser l'analyse syntaxique.

Il reste le compiler :
cc yac.tab.c -ly

L'option -ly lie le source C la bibliothque bison. L'excutable cr est un analyseur syntaxique.

Page 4

Rapport TP Compilation

5. Coordination des deux analyses :


Pour combiner les deux analyses, il faut gnrer un fichier en-tte de l'analyseur syntaxique qui dfinit les tokens par une commande %token et inclure ce fichier dans le fichier partir duquel est gnr l'analyseur lexical.

Dans le fichier de spcification monfichier.l, il faut donc ajouter les informations suivantes dans la partie dclaration :
#include "y.tab.h" extern int yyval;

Pour que yacc ou bison gnrent un fichier .h en plus du source en C, il faut utiliser l'option d. La compilation s'effectue par consquent comme suit :
yacc -d monfichier.y ou bison -d monfichier.y lex monfichier.l ou flex monfichier.l cc -o analyseur lex.yy.c y.tab.c -ll -ly

Page 5