LEX : générateur d'analyseur lexical

Lex est un utilitaire fourni avec Unix ; sa variante Flex est disponible sous Linux.

Il permet de créer automatiquement le code source d'un analyseur lexical, à partir d'instructions contenues dans un fichier construit par l'utilisateur. Le code source (en C) obtenu peut être complété par celui d'un analyseur syntaxique construit grâce à l'utilitaire Yacc. L'utilisateur peut ainsi créer un compilateur correspondant à son projet. Lex peut aussi être utilisé, indépendamment de Yacc, dans toutes les situations où on veut éviter d'écrire directement le code de l'analyseur lexical. Plus généralement, il peut être intéressant d'utiliser Lex pour tout programme où l'analyse du flot d'entrée constitue le plus gros travail.

Le fichier d'instructions, appelé ici "fichier-lex" permet à Lex de construire l'analyseur est écrit dans un méta-langage propre à Lex et qui décrit essentiellement des expressions rationnelles augmentées. Une expression rationnelle augmentée est une expression rationnelle à laquelle on a associé un ensemble d'actions. Quand l'expression rationnelle est rencontrée, ces actions sont exécutées. Pour Lex, les actions sont écrites en code C ou C++.

L'utilitaire Lex lit ce fichier-lex et construit le fichier  lex.yy.c  (nom imposé par Lex) qui contient le code source de l'analyseur. Comme la quantité de code qu'on peut rajouter au fichier-lex n'est pas limitée, on peut construire, avec l'aide de Lex, des programmes qui dépassent largement la puissance de l'analyse lexicale.

Avantages : gain de temps à la conception ; souplesse ; optimisation des flux dans l'analyseur ; avantages du C.
Inconvénients : code source volumineux ; méta-langage difficile à maitriser et parfois peu cohérent ; inconvénients du C.


Utilisation de Lex :
fichier-lex
    lex fichier-lex
lex.yy.c
    cc lex.yy.c −ll
a.out

Le détail du fonctionnement de Lex est précisé dans la description du fichier-lex.