Um scanner (também conhecido como analisador lexical) em um compilador ou intérprete deve salvar o texto dos tokens por vários motivos cruciais:
1.
Relatório de erro: Se um erro for detectado posteriormente no processo de compilação (por exemplo, durante a análise ou análise semântica), ter o texto original do token permite que o compilador gere mensagens de erro informativas. A mensagem pode identificar a localização exata do erro no código -fonte, referenciando o texto do token ofensivo. Sem salvar o texto, as mensagens de erro seriam muito menos úteis, possivelmente indicando apenas um número de linha ou tipo de token.
2.
Símbolo Tabela Construção: O scanner geralmente alimenta informações sobre identificadores (variáveis, funções etc.) à tabela de símbolos. O texto do token do identificador (seu nome) é essencial para criar entradas na tabela de símbolos. Esta tabela rastreia o significado e as propriedades dos identificadores ao longo do programa.
3.
geração de código: Em alguns casos, o texto do token pode estar diretamente incorporado ao código gerado (por exemplo, literais de string). O scanner precisa fornecer os dados de string bruta aos estágios posteriores da compilação.
4.
Expansão de pré -processamento/macro: Alguns pré -processadores ou sistemas macro precisam do texto dos tokens para realizar substituições ou outras manipulações antes do processo de compilação principal. O texto de uma macro pode precisar ser expandido na fase pré -processadora, exigindo que seja preservada.
5.
Ferramentas de depuração e análise: Se você estiver usando um depurador ou uma ferramenta de análise estática, ter o texto de token original ajuda significativamente na execução ou na compreensão da estrutura do programa.
Em resumo, enquanto o scanner categoriza os tokens em tipos (palavras -chave, identificadores, operadores etc.), descartando o próprio texto que joga informações vitais necessárias para as fases subsequentes de compilação, manuseio de erros e entendimento do programa. O texto é crucial para fornecer uma conexão entre a representação abstrata do programa (tokens e seus tipos) e o código -fonte concreto que o programador escreveu.