next up previous contents
suivant: Analyse syntaxique monter: Le compilateur précédent: Le compilateur   Table des matières

Analyse lexicale

Le flux d'entrée saisi par l'utilisateur se présente sous la forme d'une suite de caractères. Celle-ci est inutilisable en l'état pour produire les structures de données nécessaires à l'interpréteur. Il faut d'abord la transformer en une suite d'unités lexicales, les lexèmes (ou "tokens" en anglais), dont on sera ensuite plus à même de faire une analyse syntaxique selon la grammaire du langage. L'analyse lexicale doit notamment supprimer tous les caractères de séparation que sont les espaces, les tabulations et les sauts de lignes. En effet, aucun de ceux-ci n'est nécessaire pour écrire des règles ou des questions ; ils permettent uniquement de rendre plus intelligible le code de l'utilisateur. Les commentaires sont également supprimés. Un commentaire est une suite de caractères quelconques qui commence par deux tirets consécutifs, et qui s'étend jusqu'au saut de ligne suivant.
Les caractères restants sont transformés en lexèmes. Pour toute suite de caractères alphanumériques, on obtient un lexème de type SYMBOLE. Contrairement à de nombreux langages de programmation (langages Ada et C, d'autres mises en \oe uvre de Prolog), un tel symbole peut débuter par un chiffre, et même n'être composé que de chiffres. Quoi qu'il en soit, il n'aura jamais la valeur d'un nombre, cette notion n'existant strictement pas dans notre langage. S'il sont consécutifs (non séparés, même par une espace), les caractères "-" et ">" sont traduits en un seul lexème de type FLECHE. Tous les autres caractères constituent un lexème à part entière. On notera qu'un type de lexème est en fait un entier positif, et que pour les caractères seuls il s'agit de leur code ASCII.
L'analyseur lexical est obtenu à l'aide de l'outil Lex. Ce dernier génère du code C qu'il suffit ensuite de compiler normalement et de lier avec les autres modules. Notre but n'étant pas de décrire le fonctionnement de Lex, nous dirons simplement qu'il prend en entrée un fichier contenant un ensemble de motifs auxquels sont associés des actions, écrites en langage C. Celles-ci permettent justement d'ignorer certains caractères et de générer des lexèmes. Pour plus de détails, on se reportera au fichier gloorp.y fourni en annexe.
next up previous contents
suivant: Analyse syntaxique monter: Le compilateur précédent: Le compilateur   Table des matières
Alexandre DAGAN
2000-07-07