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:

  1. Sempre prefira um prefixo mais longo a um prefixo mais curto.
  2. 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.

Entradas relacionadas: