TP LEX / FLEX et YACC / BISON


Ce document a pour objectif de résumer les informations transmises en TP et de vous rappeler les chemins d'accès aux différents outils utilisés en TP ainsi qu'à leur documentation.
 

1 - INTRODUCTION

Lex et Flex sont des outils générateurs d'analyseur lexical.
Yacc et Bison sont des outils générateur d'analyseur syntaxique.

Flex et Bison sont des produits GNU. Vous pouvez trouver une documentation aux adresses suivantes :


2 - UTILISATION DES OUTILS AU CRIO UNIX

Pour pouvoir utiliser les outils lex (resp. flex) et yacc (resp. bison) au CRIO UNIX de Dauphine il faut ajouter les alias suivants : Le compilateur C/C++ au  CRIO UNIX se situe dans le répertoire : /opt/SUNWspro/bin/cc

Attention il n'y a pas de compilateur sur cid250!!

Pour revenir en haut de la page

3 - CREATION D'UN ANALYSEUR LEXICAL

Pour créer un analyseur lexical, il faut créer un fichier de spécification monfichier.l  dont le format est le suivant :
%{
         déclarations de variable et inclusion de bibliothèques en C
%}
définitions :
<identificateur><expression régulière>
...
%%
règles :
<expression régulière> {<commandes en C>}
%%
<programme principal et fonctions en C>


Nous verrons exactement comment écrire ce fichier en TP.

Les outils lex et flex génèrent le code source en C de l'analyseur lexical à partir du fichier de spécification qui leur est fourni en paramètre. Ce fichier par défaut s'appelle lex.yy.c

La commande pour générer le code C de l'analyseur est la suivante :
 

lex monfichier.l ou flex monfichier.l


Il reste à compiler le code source pour obtenir un analyseur lexical exécutable par la commande :

cc lex.yy.c -ll
L'option -ll lie le source C à la bibliothèque de lex ou flex.

L'analyseur lexical par défaut lit l'entrée standard. Il est possible de redéfinir l'entrée en modifiant la valeur de la variable yyin.

Pour revenir en haut de la page

4 - CREATION D'UN ANALYSEUR SYNTAXIQUE

Pour créer un analyseur syntaxique, il faut créer un fichier monfichier.y dont le format est le suivant :
%{
         déclarations de variable et inclusion de bibliothèques en C
%}
définitions
%%
règles de réduction 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 générer 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
Les outils yacc et bison génèrent un fichier C, nommé par défaut y.tab.c permettant de réaliser l'analyse syntaxique.

Il reste à le compiler :

cc yac.tab.c -ly
L'option -ly lie le source C à la bibliothèque de yaccou bison. L'exécutable créé est un analyseur syntaxique.
Pour revenir en haut de la page

5- COORDINATION DES DEUX ANALYSES

Pour combiner les deux analyses, il faut générer un fichier en-tête de l'analyseur syntaxique qui définit les tokens par une commande %token et inclure ce fichier dans le fichier à partir duquel est généré l'analyseur lexical.

Dans le fichier de spécification monfichier.l, il faut donc ajouter les informations suivantes dans la partie déclaration  :
 

#include "y.tab.h"
extern int yyval;


Pour que yacc ou bison génèrent un fichier .h en plus du source en C, il faut utiliser l'option -d. La compilation s'effectue par conséquent 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

Pour revenir en haut de la page

6-LIENS INTERESSANTS


 
 
 

Dernière mise à jour : 5 avril 2001 ©Maude Manouvrier