Een scanner (ook wel lexicale analysator genoemd) in een compiler of tolk moet de tekst van tokens om verschillende cruciale redenen opslaan:
1. Foutrapportage: Als er later in het compilatieproces (bijvoorbeeld tijdens het parseren of semantische analyse) een fout wordt gedetecteerd, kan de compiler met de originele tekst van het token informatieve foutmeldingen genereren. Het bericht kan de exacte locatie van de fout in de broncode bepalen door te verwijzen naar de tekst van het overtredende token. Zonder de tekst op te slaan zouden foutmeldingen veel minder nuttig zijn en mogelijk alleen een regelnummer of tokentype aangeven.
2. Symbooltabelconstructie: De scanner voert vaak informatie over identificatiegegevens (variabelen, functies, enz.) naar de symbooltabel. De tekst van het identificatietoken (de naam ervan) is essentieel voor het maken van vermeldingen in de symbolentabel. Deze tabel houdt de betekenis en eigenschappen van ID's in het hele programma bij.
3. Code genereren: In sommige gevallen kan de tekst van het token rechtstreeks in de gegenereerde code worden ingebed (bijvoorbeeld letterlijke tekenreeksen). De scanner moet de onbewerkte stringgegevens aanleveren voor latere compilatiestadia.
4. Voorbewerking/Macro-uitbreiding: Sommige preprocessors of macrosystemen hebben de tekst van tokens nodig om vervangingen of andere manipulaties uit te voeren vóór het hoofdcompilatieproces. Het kan nodig zijn dat de tekst van een macro in de preprocessorfase wordt uitgebreid, waardoor deze behouden moet blijven.
5. Hulpmiddelen voor foutopsporing en analyse: Als u een debugger of een statische analysetool gebruikt, helpt het hebben van de originele tokentekst aanzienlijk bij het traceren van de uitvoering of het begrijpen van de structuur van het programma.
Kortom, terwijl de scanner tokens categoriseert in typen (trefwoorden, identificatiegegevens, operatoren, enz.), gooit het weggooien van de tekst zelf essentiële informatie weg die nodig is voor de volgende fasen van compilatie, foutafhandeling en begrip van het programma. De tekst is cruciaal voor het leggen van een verbinding tussen de abstracte weergave van het programma (tokens en hun typen) en de concrete broncode die de programmeur heeft geschreven. |