Chapitre2 : Analyse lexical Compilation SMI/S5 Compilation Prof. : M. BENADDY A
Chapitre2 : Analyse lexical Compilation SMI/S5 Compilation Prof. : M. BENADDY A.U. 2015-2016 Prof. M. BENADDY Compilation 2 Rôle de l’analyseur lexicale : lire les caractères d’entrée (programme source) et de produire comme résultat une suite d’unités lexicales appelées TOKENS que l’analyseur syntaxique va utiliser. Les TOKENS sont constitués au fur et à mesure de la lecture du texte source, on distingue deux types d’unités lexicales. Les unités propres au langage, les mots clés, les séparateurs, les opérateurs, ...etc. Les unités personnalisées qui sont crées par le programmeur (les constantes, les identificateurs). Introduction Introduction Prof. M. BENADDY Compilation 3 Remarque : l’analyseur lexical de certains compilateurs procèdent à l’élimination dans le programme source des commentaires et des espaces qu’apparaissent sous forme de caractères blanc ou de tabulation ou bien les sauts de lignes. Introduction Introduction Analyseur lexical Analyseur syntaxique Table des symboles Table des erreurs Unité lexicale Donner l'unité lexicale suivante (type, val) Programme source Prof. M. BENADDY Compilation 4 Token : unité lexicale, est une paire de nom et d’une valeur optionnelle. Le nom du token est un symbole abstrait qui représente une unité lexicale, (mot clé, suite de caractère dénotant un identifiant, ...). Le modèle : est une description de la forme que peut prendre les lexèmes d’une unité lexicale. C’est une règle qui décrit l’ensemble des lexèmes pouvant représenter une unité lexicale particulière dans le programme source. Dans le cas des mots clés, le modèle est juste une séquence de caractères qui forme le mot clé. Pour les identificateurs et d’autres unités lexicales, le modèle est une structure plus complexes. Lexème : est une suite de caractères dans le programme sources qui concorde avec le modèle. Il est identifié par l’analyseur lexical comme instance d’un token. Unités lexicales, lexèmes, modèles Unités lexicales, lexèmes, modèles Prof. M. BENADDY Compilation 5 Exemple : Unités lexicales, lexèmes, modèles Unités lexicales, lexèmes, modèles Prof. M. BENADDY Compilation 6 Remarques : Dans la plupart des langages de programmation, les classes suivantes couvrent la majorité des tokens (unités lexicales). Un token (unité lexicale) pour chaque mot clé. Le modèle pour le mot clé est le même que le mot clé. Les tokens pour les opérateurs, soit individuelle soit par classes (exemple comparaison de l’exemple précédent). Une unité lexicale pour tous les identificateurs (nom des variables, des fonctions, des classes, tableaux, structures...). Une ou plusieurs unités lexicales (tokens) pour les constantes, les nombres et les chaînes de caractères. Une unité lexicale pour chaque symbole de ponctuation, tels que, la virgule, le point virgule, les parenthèses, les accolades,... Unités lexicales, lexèmes, modèles Unités lexicales, lexèmes, modèles Prof. M. BENADDY Compilation 7 Exemple : float pi = 3.14 ; La sous chaîne pi est un lexème d’unité lexicale identificateur, cette unité lexicale est retournée à l’analyseur syntaxique, le retour est souvent réalisé en passant un entier correspondant à l’unité lexicale. Le modèle de l’unité lexicale float est l’unité correspondant à la simple chaîne float qui vérifie l’orthographe des mots clés. Unités lexicales, lexèmes, modèles Unités lexicales, lexèmes, modèles Prof. M. BENADDY Compilation 8 L’analyseur lexical réduit les informations sur les unités lexicales dans les attributs qui leur sont associés. En pratique une unité lexicale a en général un seul attribut : un pointeur vers l’entrée dans la table des symboles dans laquelle l’information sur l’unité lexicale est conservée, le pointeur devient alors l’attribut de l’entité lexicale. Attributs des unités lexicales Attributs des unités lexicales Prof. M. BENADDY Compilation 9 Exemple : en Fortran E = M * C * * 2 (**désigne la puissance en Fortran) Les unités lexicales et les valeurs des attributs sont donnés par : <id, pointeur vers l’entrée de la table des symboles associé à E> <op_affectation> <id, pointeur vers l’entrée de la table des symboles associé à M> <op_multiplication> <id, pointeur vers l’entrée de la table des symboles associé à C> <op_exposant> <nombre, valeur entière 2> Attributs des unités lexicales Attributs des unités lexicales Prof. M. BENADDY Compilation 10 Certains langages ne tolèrent pas que les mots clés soient utilisés comme des identificateurs. Ce qui veut dire que leur signification est prédéfinie et ne peut pas être changé par le programmeur. Les mots clés sont installés dans la table des symboles et quand un identificateur est rencontré il est comparé avec les mots clés de la table de symboles, s’il coïncide avec un des mots clés de la table le scanner (analyseur lexicale) génère le code de ce mot clés, sinon le code de l’identificateur est transmis. Exemples : Pascal et C Les mots réservés Les mots réservés Prof. M. BENADDY Compilation 11 Peu d’erreurs sont détectées au niveau lexicale, car un analyseur lexical d’une vision très localisée du programme source. Exemple : si on rencontre la chaîne fi dans un programme avec fi(i==j) l’analyseur lexical ne peut pas dire s’il s’agit du mot clé if mal écrit ou d’un identificateur non déclaré. Comme fi est un identificateur valide, l’analyseur lexical doit retourner l’unité lexicale d’un identificateur et laisse une autre phase du compilateur traiter cette erreur éventuelle, supposant qu’une situation se présente où l’analyseur lexical est incapable de continuer car aucun de ces modèles des unités lexicales ne filtre le préfixe du reste du texte d’entrée. Exemple : une variable qui commence par un caractère non valide (µx, αy, ...) à ce moment-là l’analyseur lexical déclenche une erreur qui indique la non validité du nom de la variable. Les erreurs lexicales Les erreurs lexicales Prof. M. BENADDY Compilation 12 La procédure d’un analyseur lexical consiste dans un premier temps en la description des unités lexicales à l’aide des expressions régulières. Les expressions régulières sont une notation importante pour spécifier les modèles, chaque modèle reconnaît un ensemble de chaînes appelés aussi mot, ces expressions régulières seront transformées en des automates qui seront implémentés sur machine. Spécification des unités lexicales Spécification des unités lexicales Prof. M. BENADDY Compilation 13 Mots et langage : Lettre et mots : Soit A un ensemble fini appelé alphabet, les éléments de A sont appelés des lettres, exemple : A={a,b,c,1,3,h}. Un mot ou une chaîne sur un alphabet est une séquence finie de symboles extrait de cet ensemble. On définit A+ l’ensemble des mots non vides comme le plus petit ensemble tel que : Pour toute lettre ℓ appartenant à l’alphabet A, ℓ appartiendra à A+. Pour tout mot m A ϵ + et toute lettre ℓ A, le mot ϵ m ℓ A ϵ +, (m ℓ représente la concaténation du mot m et de la lettre ℓ). Soit un mot m A ϵ +, on dira que m constitue un mot sur A (mot fait à partir de l’alphabet A). Spécification des unités lexicales Spécification des unités lexicales Prof. M. BENADDY Compilation 14 Mots et langage : Opérations sur les langages : Plusieurs opérations peuvent s’appliquer aux langages. Pour l’analyse lexicale on s’intéresse principalement à l’union, la concaténation et la fermeture (de Kleene), on peut aussi généraliser l’opération exponentiation aux langages en définissant L0= { Ԑ }, Li=LLi-1 ainsi Li est la concaténation de L, i-1 fois avec lui même. Remarque : Ces notations sont employées dans l’écriture des expressions régulières. Spécification des unités lexicales Spécification des unités lexicales Prof. M. BENADDY Compilation 15 Mots et langage : Opérations sur les langages : Exemple : L = {a, ....,z,A,...,Z}, C={0,...,9}, on peut créer de nouveaux langages à partir des langages L et C, en appliquant les opérateurs précédents. L U C est l’ensemble des lettres et des chiffres. LC est l’ensemble des mots formés d’une lettre suivie d’un chiffre. L4 est l’ensemble des mots formés de 4 lettres. L* est l’ensemble de tout les mots de lettres, y compris le mot vide, . Ԑ L(LUD)* est l’ensemble des mots de lettres et de chiffres commençant par une lettre. C+ est l’ensemble des mots qui sont constitués d’au moins d’un chiffre. Spécification des unités lexicales Spécification des unités lexicales Prof. M. BENADDY Compilation 16 Expressions régulières : On construit une expression régulière à partir d’expressions régulières plus simples, en utilisant les règles de définitions du langage concerné. Chaque expression régulière r dénote un langage L(r). Les règles de définition spécifient comment L(r) est formé en combinant de manière variée les langages dénotés par les sous-expressions de r. Les expressions régulières sont construites récursivement à partir d’expressions régulières plus simples, en utilisant des règles. Chaque expression régulière r dénote un langage L(r), qui est aussi définit récursivement à partir des langages dénotés par les sous- expressions de r. Les règles qui définissent les expressions régulières sur un alphabet ∑ et les langages dénotés par ces expressions. Spécification des unités lexicales Spécification des unités lexicales Prof. M. BENADDY Compilation 17 Expressions régulières : Règles : est une expression régulière, et L( ) = { }, le langage Ԑ Ԑ Ԑ dont le seule membre est le mot vide . Ԑ Si a est un symbole de ∑, alors a est une expression régulière, et L(a) = {a}, c-à-d le langage avec une seule chaîne uploads/Management/ compilation2-3.pdf
Documents similaires










-
29
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 29, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.7597MB