Analyse lexicale (analyseur) dans la conception du compilateur avec exemple
โก Rรฉsumรฉ intelligent
L'analyse lexicale est la premiรจre phase de la conception d'un compilateur ; elle consiste ร convertir un flux de caractรจres source en jetons significatifs. Elle supprime les espaces et les commentaires, enregistre les jetons dans la table des symboles et signale les erreurs lexicales ร l'analyseur syntaxique.

Quโest-ce que lโanalyse lexicale ?
Analyse lexicale est la toute premiรจre phase de la conception du compilateur. Un Lexer rรฉcupรจre le code source modifiรฉ qui est รฉcrit sous forme de phrases. En dโautres termes, il vous aide ร convertir une sรฉquence de caractรจres en une sรฉquence de jetons. L'analyseur lexical dรฉcompose cette syntaxe en une sรฉrie de jetons. Il supprime tout espace supplรฉmentaire ou commentaire รฉcrit dans le code source.
Les programmes qui effectuent une analyse lexicale dans la conception du compilateur sont appelรฉs analyseurs lexicaux ou lexers. Un lexer contient un tokenizer ou un scanner. Si l'analyseur lexical dรฉtecte que le jeton n'est pas valide, il gรฉnรจre une erreur. Le rรดle de Lexical Analyzer dans la conception du compilateur est de lire les flux de caractรจres du code source, de vรฉrifier les jetons lรฉgaux et de transmettre les donnรฉes ร l'analyseur de syntaxe lorsqu'il le demande.
Exemple
How Pleasant Is The Weather?
Voir cet exemple d'analyse lexicale ; Ici, nous pouvons facilement reconnaรฎtre qu'il y a cinq mots "Quelle est la qualitรฉ du temps". C'est trรจs naturel pour nous car nous pouvons reconnaรฎtre les sรฉparateurs, les espaces et le symbole de ponctuation.
HowPl easantIs Th ewe ather?
Maintenant, vรฉrifiez cet exemple, nous pouvons รฉgalement lire ceci. Cependant, cela prendra un certain temps car des sรฉparateurs sont placรฉs aux endroits impairs. Ce nโest pas quelque chose qui vous vient immรฉdiatement.
Terminologies de base
Qu'est-ce qu'un lexรจme ?
Un lexรจme est une sรฉquence de caractรจres inclus dans le programme source selon le modรจle de correspondance d'un jeton. Ce n'est rien d'autre qu'une instance d'un jeton.
Qu'est-ce qu'un jeton ?
Dans la conception du compilateur, les jetons sont la sรฉquence de caractรจres qui reprรฉsente une unitรฉ d'information dans le programme source.
Quโest-ce que le modรจle ?
Un modรจle est une description utilisรฉe par le jeton. Dans le cas d'un mot-clรฉ utilisรฉ comme jeton, le modรจle est une sรฉquence de caractรจres.
Analyseur lexical Architecture : Comment les jetons sont reconnus
La tรขche principale de lโanalyse lexicale est de lire les caractรจres saisis dans le code et de produire des jetons.
L'analyseur lexical analyse l'intรฉgralitรฉ du code source du programme. Il identifie chaque jeton un par un. Les scanners sont gรฉnรฉralement implรฉmentรฉs pour produire des jetons uniquement ร la demande d'un analyseur. Voici comment fonctionne la reconnaissance des jetons dans la conception du compilateur :

- ยซ Get next token ยป est une commande qui est envoyรฉe de l'analyseur ร l'analyseur lexical.
- A la rรฉception de cette commande, l'analyseur lexical analyse l'entrรฉe jusqu'ร ce qu'il trouve le jeton suivant.
- Il renvoie le jeton ร Parser.
Lexical Analyzer ignore les espaces et les commentaires lors de la crรฉation de ces jetons. Si une erreur est prรฉsente, l'analyseur lexical corrรฉlera cette erreur avec le fichier source et le numรฉro de ligne.
Rรดles de l'analyseur lexical
L'analyseur lexical effectue les tรขches ci-dessous :
- Aide ร identifier le jeton dans la table des symboles
- Supprime les espaces blancs et les commentaires du programme source
- Corrรจle les messages d'erreur avec le programme source
- Vous aide ร dรฉvelopper les macros si elles se trouvent dans le programme source
- Lire les caractรจres d'entrรฉe du programme source
Exemple d'analyse lexicale, jetons, non-jetons
Considรฉrez le code suivant qui est transmis ร Lexical Analyzer
#include <stdio.h> int maximum(int x, int y) { // This will compare 2 numbers if (x > y) return x; else { return y; } }
Exemples de jetons crรฉรฉs
| lexรจme | Token |
|---|---|
| int | Mots-clรฉs |
| maximales | Identifiant |
| ( | Opรฉrateur |
| int | Mots-clรฉs |
| x | Identifiant |
| , | Opรฉrateur |
| int | Mots-clรฉs |
| Y | Identifiant |
| ) | Opรฉrateur |
| { | Opรฉrateur |
| If | Mots-clรฉs |
Exemples de non-jetons
| Type | Exemples |
|---|---|
| Commentaires | // Ceci comparera 2 nombres |
| Directive du prรฉprocesseur | #inclut |
| Directive du prรฉprocesseur | #dรฉfinir NUMS 8,9 |
| Macro | CHIFFRES |
| Espace blanc | /n /b /t |
Erreurs lexicales
Une sรฉquence de caractรจres qui ne peut รชtre analysรฉe dans aucun jeton valide est une erreur lexicale. Faits importants sur l'erreur lexicale :
- Les erreurs lexicales ne sont pas trรจs courantes, mais elles doivent รชtre gรฉrรฉes par un scanner
- Les fautes d'orthographe des identifiants, opรฉrateurs, mots-clรฉs sont considรฉrรฉes comme des erreurs lexicales
- Gรฉnรฉralement, une erreur lexicale est causรฉe par l'apparition d'un caractรจre illรฉgal, principalement au dรฉbut d'un jeton.
Rรฉcupรฉration d'erreur dans l'analyseur lexical
Voici quelques techniques de rรฉcupรฉration dโerreur les plus courantes :
- Supprime un caractรจre de l'entrรฉe restante
- En mode panique, les caractรจres successifs sont toujours ignorรฉs jusqu'ร ce que l'on atteigne un jeton bien formรฉ
- En insรฉrant le caractรจre manquant dans l'entrรฉe restante
- Remplacer un personnage par un autre personnage
- Transposer deux caractรจres de sรฉrie
Analyseur lexical vs analyseur
| Analyseur lexical | Analyseur |
|---|---|
| Programme d'entrรฉe de numรฉrisation | Effectuer une analyse syntaxique |
| Identifier les jetons | Crรฉer un abdostracreprรฉsentation du code |
| Insรฉrer des jetons dans la table des symboles | Mettre ร jour les entrรฉes de la table des symboles |
| Il gรฉnรจre des erreurs lexicales | Il gรฉnรจre un arbre d'analyse du code source |
Pourquoi sรฉparer Lexical et Parser ?
- La simplicitรฉ de conception : elle facilite le processus d'analyse lexicale et d'analyse syntaxique en รฉliminant les jetons indรฉsirables.
- Pour amรฉliorer l'efficacitรฉ du compilateur : vous aide ร amรฉliorer l'efficacitรฉ du compilateur
- Spรฉcialisation : des techniques spรฉcialisรฉes peuvent รชtre appliquรฉes pour amรฉliorer le processus d'analyse lexicale
- Portabilitรฉ : seul le scanner nรฉcessite de communiquer avec le monde extรฉrieur
- Portabilitรฉ accrue : particularitรฉs spรฉcifiques au pรฉriphรฉrique d'entrรฉe limitรฉes au lexer
Avantages de l'analyse lexicale
- La mรฉthode de l'analyseur lexical est utilisรฉe par des programmes tels que les compilateurs qui peuvent utiliser les donnรฉes analysรฉes du code d'un programmeur pour crรฉer un code exรฉcutable binaire compilรฉ.
- Il est utilisรฉ par les navigateurs Web pour formater et afficher une page Web ร l'aide des donnรฉes analysรฉes de Javascรฉnario, HTML, CSS
- Un analyseur lexical distinct vous aide ร construire un processeur spรฉcialisรฉ et potentiellement plus efficace pour la tรขche
Inconvรฉnient de l'analyse lexicale
- Vous devez passer beaucoup de temps ร lire le programme source et ร le partitionner sous forme de jetons
- Certaines expressions rรฉguliรจres sont assez difficiles ร comprendre par rapport aux rรจgles PEG ou EBNF
- Plus d'efforts sont nรฉcessaires pour dรฉvelopper et dรฉboguer le lexer et ses descriptions de jetons
- Une surcharge d'exรฉcution supplรฉmentaire est requise pour gรฉnรฉrer les tables lexer et construire les jetons
