Lex (logiciel)

De Wicri Manuel
Principe de fonctionnement de lex

Lex est un générateur d'analyseurs lexicaux. Il est étroitement associé, dans son fonctionnement, au langage C et disponible en standard sur les systèmes Unix.

Présentation générale

Lex est un générateur d'analyseurs lexicaux. Il est basé sur un ensemble de règles de reconnaissance lexicale auxquelles sont associées des instructions en langage C. L'analyseur Lex produire un programme C (qui sera ensuite compilé).

Dans les cas simples il permet d'effectuer des substitutions. Voici un exemple :

%%
chevals     printf("chevaux");
hibous      printf("hiboux");
%%
main() {
  yylex();
}


L'exemple qui suit montre un programme qui compte le nombre de sigles dans un texte, en supposant que tous les termes composés de plusieurs majuscules sont des sigles.

%{
#include <stdio.h>
 int nombreDeSigles;
%}
%%
[A-Z][A-Z]+   nombreDeSigles++;
.             ;
\n            ;
%%
main() {
  nombreDeSigles=0;
  yylex();
  printf("%d\n", nombreDeSigles);
  return 0;
}

Les règles lex sont des expressions régulières. Elles démarrent en première colonne des lignes encadrées par des repères %%. Le programme en comporte 3 :

  • la règle [A-Z][A-Z]+ reconnait les sigles ;
  • la règle limitée à un point reconnait n'importe quel caractère isolé - sauf les sauts de ligne ;
  • la règle \n reconnait les sauts de ligne.

Les actions sont des instructions en langage C. Elles sont séparées des règles par des espaces. L'exemple en comporte 3. La première fait un simple comptage les 2 autres servent à inhiber le fonctionnement implicite de l'analyseur qui recopie le flot d'entrée.

Dans le programme principal, la ligne yylex(); appelle le générateur.

Dans sa mise en œuvre pratique, lex est un préprocesseur qui construit un programme C qui doit ensuite être compilé.

Lex et les langages de balisage

La conception de lex permet de l'utiliser comme un outil dont l'usage est assez général dès lors que les données sont balisées.

Icône de détail Article détaillé : Utilisation de lex dans le monde XML.

Voir aussi

Sur ce wiki :

Dans le réseau Wicri :

La page de référence « Lex (logiciel) » est sur le wiki Wicri/Outils.