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
InstallIDo 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.