Vous êtes sur la page 1sur 5

Lex : langage de spécification d’analyseurs lexicaux

programme source
écrit en Lex compilateur lex.yy.c ou
fichier.l Lex fichier.c

fichier.c compilateur
fichier.exe
C

flot d’entrée
suite d’unités lexicales
fichier.exe

1
Spécifications en Lex

Un programme Lex consiste en trois parties:

déclarations
%%
règles de traductions
%%
procédures auxiliaires

déclarations: déclarations de variables, de constantes littérales et de définitions régulières

règles de traductions:
m1 {action1}
m2 {action2}
...
mn {actionn}

où chaque mi est une expression régulière et chaque actioni est un fragment


de programme qui décrit quelle action réaliser quand un lexème concorde avec le modèle

2
Un premier exemple

%{
int l= 0 , c = 0 ;
%}
%%
\n ++l; ++c;
. ++c;
%%
int yywrap(void) {
return 1;
}
main(){
yylex();
printf ( " # of line = %d , # of char = %d \n " ,l , c);
}

3
%{
%}
ch [0-9]
let [a-zA-z]
sep [ \t\n]
op [+\-*/]
%%
{ch}+ ECHO;
{let}({let}|{ch})* printf("id ");
{op}? printf("op ");
%%
int yywrap(void) {
return 1;
}

int main(int argc, char *argv[]) {


yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}

4
Liste des opérateurs et abréviations
%% : séparateur de section
\ : caractère d’échappement
‘’ ‘’ : quotation
[ ] : constructeur de classe
- : intervalle
^ : complément
\ : échappement
* : itération (éventuellement 0 fois)
+ : itération d’un nbre de fois > 0
() : regroupement
| : disjonction
{ } : répétition {n} nfois; {n,m} n ou n+1 ou… m fois
x? : x caractère optionnel
. : n’importe quel caractère sauf \n
\n : newline
\t : tabulation
\b : backspace
$ : fin de ligne
^ : début de ligne
/ : contexte à droite
<> : contexte général
% : directive

Vous aimerez peut-être aussi