En skanner (även känd som en lexikal analysator) i en kompilator eller tolk måste spara texten av tokens av flera avgörande skäl:
1. felrapportering: Om ett fel upptäcks senare i sammanställningsprocessen (t.ex. under parsing eller semantisk analys), har den ursprungliga texten till token att kompilatorn kan generera informativa felmeddelanden. Meddelandet kan fastställa den exakta platsen för felet i källkoden genom att hänvisa till den kränkande tokenens text. Utan att spara texten skulle felmeddelanden vara mycket mindre användbara, eventuellt bara indikera ett radnummer eller token -typ.
2. Symbol Tabellkonstruktion: Skannern matar ofta information om identifierare (variabler, funktioner etc.) till symboltabellen. Texten till identifieraren (dess namn) är avgörande för att skapa poster i symboltabellen. Denna tabell spårar betydelsen och egenskaperna hos identifierare i hela programmet.
3. Kodgenerering: I vissa fall kan texten på token vara direkt inbäddad i den genererade koden (t.ex. stränglitteraler). Skannern måste tillhandahålla rå strängdata till senare sammanställningsstadier.
4. Förbehandling/makroutvidgning: Vissa förbehandlar eller makrosystem behöver texten till tokens för att utföra ersättningar eller andra manipulationer före huvudkompileringsprocessen. Texten på ett makro kan behöva utvidgas i förbehandlingsfasen, vilket kräver att den bevaras.
5. felsöknings- och analysverktyg: Om du använder en felsökare eller ett statiskt analysverktyg, har den ursprungliga token -texten betydligt att spåra exekvering eller förstå programmets struktur.
Kort sagt, medan skannern kategoriserar tokens i typer (nyckelord, identifierare, operatörer etc.), kastar kassering av själva texten av vital information som är nödvändig för efterföljande faser av sammanställning, felhantering och programförståelse. Texten är avgörande för att ge en koppling mellan den abstrakta representationen av programmet (tokens och deras typer) och den konkreta källkoden som programmeraren skrev.