Análise Léxica: Erros, Buffers e Reconhecimento de Tokens
Classificado em Computação
Escrito em em português com um tamanho de 3,09 KB
Erros Léxicos
- Acontecem quando nenhum dos padrões para tokens casa com nenhum prefixo da entrada restante.
- Estratégia mais simples: o "Modo Pânico" de recuperação de erro.
- Remover os caracteres seguintes da entrada restante, até que o analisador léxico possa encontrar um token bem formado no início da entrada restante.
- Outras ações possíveis:
- Remover um caractere da entrada restante.
- Inserir um caractere que falta na entrada restante.
- Substituir um caractere por outro.
- Transpor dois caracteres adjacentes.
- Para isso, é necessário verificar se um prefixo da entrada restante pode ser transformado em um lexema válido por uma única transformação.
- Na prática, a maioria dos erros léxicos envolve um único caractere.
Buffers de Entrada
Em algumas linguagens de programação, é comum que alguns operadores sejam representados por dois caracteres, como ==
, <=
, >=
, **
. Mesmo para identificadores, é necessário encontrar um caractere não válido (ou um espaço em branco) para tomar a decisão. É preciso "olhar mais adiante" na entrada para que o analisador léxico possa prover a correta identificação.
- A melhor forma de fazer isso é através do uso de buffers de entrada com dois apontadores (um para o início e outro para o final de um lexema válido).
Solução de Conflitos Léxicos
Quando vários prefixos da entrada casam com um ou mais padrões:
- Sempre prefira um prefixo mais longo a um prefixo mais curto.
- Se for possível casar o prefixo mais longo com dois ou mais padrões, prefira o padrão listado primeiro na Tabela de Símbolos (TS) (ou no programa de entrada do gerador de analisador).
Reconhecimento de Tokens
Para fazer o reconhecimento de palavras reservadas e identificadores, podemos usar uma de duas abordagens:
- Instalar inicialmente as palavras reservadas na Tabela de Símbolos (TS), juntamente com um campo adicional que indique o token que essa palavra representa. Ao encontrar um identificador, uma função
InstallID
o coloca na TS, indicando que se trata de um ID. Todo identificador encontrado que não estiver previamente na TS será um ID; se estiver na TS, então retorna o tipo do token ali registrado. - Criar diagramas para cada palavra-chave isoladamente. Se, durante a leitura da entrada, um estado aceitador que identifica tal palavra for alcançado, o token referente é retornado. Esta abordagem precisa ser apoiada pelo esquema de bufferização, usando o forward ou lookahead para "contextualizar" o lexema.
Implementação do Autômato Léxico
A implementação do autômato pode ser feita de modo:
- Implícito: uso de uma estrutura bidimensional que permita o percorrimento dos estados de acordo com a entrada sobre o apontador forward.
- Explícito: programação do conceito de estados através de comandos do tipo
switch-case
.