Un scanner (également appelé analyseur lexical) dans un compilateur ou un interpréteur doit sauvegarder le texte des jetons pour plusieurs raisons cruciales :
1. Rapport d'erreurs : Si une erreur est détectée ultérieurement dans le processus de compilation (par exemple, lors de l'analyse syntaxique ou de l'analyse sémantique), le fait de disposer du texte original du jeton permet au compilateur de générer des messages d'erreur informatifs. Le message peut identifier l'emplacement exact de l'erreur dans le code source en faisant référence au texte du jeton incriminé. Sans enregistrer le texte, les messages d'erreur seraient beaucoup moins utiles, indiquant éventuellement uniquement un numéro de ligne ou un type de jeton.
2. Construction de la table des symboles : Le scanner transmet souvent des informations sur les identifiants (variables, fonctions, etc.) à la table des symboles. Le texte du jeton identifiant (son nom) est essentiel pour créer des entrées dans la table des symboles. Ce tableau suit la signification et les propriétés des identifiants tout au long du programme.
3. Génération de code : Dans certains cas, le texte du jeton peut être directement intégré dans le code généré (par exemple, des chaînes littérales). Le scanner doit fournir les données de chaîne brutes aux étapes ultérieures de la compilation.
4. Prétraitement/Extension de macro : Certains préprocesseurs ou systèmes de macros ont besoin du texte des jetons pour effectuer des substitutions ou d'autres manipulations avant le processus de compilation principal. Le texte d'une macro devra peut-être être développé lors de la phase de préprocesseur, ce qui nécessitera sa préservation.
5. Outils de débogage et d'analyse : Si vous utilisez un débogueur ou un outil d'analyse statique, le fait de disposer du texte du jeton d'origine aide considérablement à suivre l'exécution ou à comprendre la structure du programme.
En bref, alors que le scanner classe les jetons en types (mots-clés, identifiants, opérateurs, etc.), la suppression du texte lui-même jette des informations vitales nécessaires aux phases ultérieures de compilation, de gestion des erreurs et de compréhension du programme. Le texte est crucial pour établir un lien entre la représentation abstraite du programme (jetons et leurs types) et le code source concret écrit par le programmeur.
|