análise Lexical no compilador

análise Lexical no compilador é o primeiro passo na análise do programa de origem. A análise lexical lê o fluxo de entrada do caractere do programa de origem por caractere e produz a sequência de tokens. Esses tokens são fornecidos como uma entrada para o analisador para análise. Nesse contexto, discutiremos o processo de análise lexical em breve, juntamente com os erros lexicais e sua recuperação.

conteúdo: Análise Lexical no compilador

  1. terminologias na análise Lexical
  2. o que é análise Lexical?
    • Exemplos de Análise Léxica
  3. a Função do Analisador Léxico
  4. Lexical Erro
  5. Recuperação de Erro
  6. Pedidas

Terminologias em Análise Léxica

Antes de chegar em que a análise léxica é a forma como ela é executada vamos falar sobre algumas terminologias que vamos encontrar ao discutir a análise léxica.

  • lexema
    o lexema pode ser definido como uma sequência de caracteres que forma um padrão e pode ser reconhecido como um token.
  • Pattern
    depois de identificar o padrão do lexema, pode-se descrever que tipo de token pode ser formado. Como o padrão de algum lexema forma uma palavra-chave, o padrão de alguns lexemas forma um identificador.
  • Token
    um lexema com um padrão válido forma um token. Na análise lexical, um token válido pode ser identificadores, palavras-chave, separadores, caracteres especiais, constantes e operadores.

Tokens

O Que É análise Lexical?

anteriormente, desativamos o lexical analyzer em nosso compilador de conteúdo no computador. Aprendemos que o compilador realiza a análise do programa de origem por meio de diferentes fases para transformá-lo no programa de destino. A análise lexical é a primeira fase pela qual o programa de origem deve passar.

a análise lexical é o processo de tokenização, ou seja, ele lê a string de entrada de um caractere de programa de origem por caractere e, assim que identifica um final do lexema, identifica seu padrão e o converte em um token.

o analisador lexical consiste em dois processos consecutivos que incluem digitalização e análise lexical.

processo do analisador Lexical

  1. Digitalização: a fase de digitalização elimina apenas os elementos não simbólicos do programa de origem. Como eliminar comentários, compactando os espaços em branco consecutivos, etc.
  2. Análise Lexical: A fase de análise Lexical executa a tokenização na saída fornecida pelo scanner e, assim, produz tokens.

o programa utilizado para a realização de análise lexical é referido como lexer ou analisador lexical. Agora vamos dar um exemplo de análise lexical realizada em uma declaração:

exemplo 1 de análise Lexical:

análise Lexical no design do compilador, identifique tokens.

agora, quando lermos esta declaração, Podemos identificar facilmente que existem nove tokens na declaração acima.

  1. Identificadores -> lexical
  2. Identificadores -> análise
  3. Identificadores -> em
  4. Identificadores -> compilador
  5. Identificadores -> design
  6. Separador -> ,
  7. Identificadores -> identificar
  8. Identificadores -> tokens
  9. Separador> .

assim como no total, existem 9 tokens no fluxo de caracteres acima.

Exemplo 2 da Análise Léxica:

printf(” valor de i é %d “, i);

Agora vamos tentar encontrar tokens de fora deste fluxo de entrada.

  1. Palavra-chave> printf
  2. Caractere Especial -> (
  3. Literal -> “Valor de i é %d “
  4. Separador -> ,
  5. Identificador -> eu
  6. Caractere Especial -> )
  7. Separador de -> ;

Nota:

  • toda A cadeia de caracteres dentro do duplo vírgulas invertidas i.e. “” é considerado um único token.
  • o espaço em branco que separa os caracteres no fluxo de entrada separa apenas os tokens e, portanto, é eliminado durante a contagem dos tokens.

papel do analisador Lexical

sendo a primeira fase na análise do programa de origem o analisador lexical desempenha um papel importante na transformação do programa de origem para o programa de destino.

todo Este cenário pode ser realizado com a ajuda da figura dada abaixo:

Análise Léxica no Compilador

  1. O analisador léxico da fase de scanner ou lexer programa implantado em que produz tokens apenas quando eles são comandados pelo analisador para fazê-lo.
  2. o analisador gera o comando getNextToken e o envia para o analisador lexical como resposta a isso, o analisador lexical começa a ler o caractere de fluxo de entrada por caractere até identificar um lexema que pode ser reconhecido como um token.
  3. assim que um token é produzido, o analisador lexical o envia ao analisador de sintaxe para análise.
  4. juntamente com o analisador de sintaxe, o analisador lexical também se comunica com a tabela de símbolos. Quando um analisador lexical identifica um lexema como um identificador, ele insere esse lexema na tabela de símbolos.
  5. às vezes, as informações do identificador na tabela de símbolos ajudam o analisador lexical a determinar o token que deve ser enviado ao analisador.
  6. além de identificar os tokens no fluxo de entrada, o analisador lexical também elimina o espaço em branco/espaço em branco e os comentários do programa. Essas outras coisas incluem caracteres que separam tokens, guias, espaços em branco, novas linhas.
  7. o analisador lexical ajuda a relacionar as mensagens de erro produzidas pelo compilador. Apenas, por exemplo, o analisador lexical mantém o registro de cada novo caractere de linha que ele encontra ao digitalizar o programa de origem para que ele facilmente relacione a mensagem de erro com o número da linha do programa de origem.
  8. se o programa de origem usa macros, o analisador lexical expande as macros no programa de origem.

erro Lexical

o próprio analisador lexical não é eficiente para determinar o erro do programa de origem. Por exemplo, considere uma declaração:

prtf (“valor de I é %d”, i);

agora, na instrução acima, quando a string prtf é encontrada, o analisador lexical não consegue adivinhar se o prtf é uma grafia incorreta da palavra-chave ‘printf’ ou se é um identificador de função não declarado.

mas de acordo com a regra predefinida prtf é um lexema válido cujo padrão conclui que é um token identificador. Agora, o analisador lexical enviará o token prtf para a próxima fase, ou seja, analisador que estará lidando com o erro que ocorreu devido à transposição de letras.

recuperação de erros

bem, às vezes é até impossível para um analisador lexical identificar um lexema como um token, pois o padrão do lexema não corresponde a nenhum dos padrões predefinidos para tokens. Nesse caso, temos que aplicar algumas estratégias de recuperação de erros.

  1. na recuperação do modo de pânico, o caractere sucessivo do lexema é excluído até que o analisador lexical identifique um token válido.
  2. elimine o primeiro caractere da entrada restante.
  3. identifique o possível caractere ausente e insira-o na entrada restante adequadamente.
  4. substitua um caractere na entrada restante para obter um token válido.
  5. troque a posição de dois caracteres adjacentes na entrada restante.

ao executar as ações de recuperação de erro acima, verifique se o prefixo da entrada restante corresponde a qualquer padrão de tokens. Geralmente, ocorre um erro lexical devido a um único caractere. Portanto, você pode corrigir o erro lexical com uma única transformação. E, na medida do possível, um número menor de transformações deve converter o programa de origem em uma sequência de tokens válidos que ele pode entregar ao analisador.

key Takeaways

  • a análise Lexical é a primeira fase na análise do programa de origem no compilador.
  • o analisador lexical é implementado por dois processos consecutivos scanner e análise lexical.
  • o Scanner elimina os elementos não simbólicos do fluxo de entrada.
  • a análise Lexical realiza a tokenização.
  • assim, o analisador lexical gera uma sequência de tokens e os encaminha para o analisador.
  • o analisador em possuir um token do analisador lexical faz uma chamada getNextToken que insiste que o analisador lexical leia o fluxo de entrada de caracteres até identificar o próximo token.
  • se o analisador lexical identifica o padrão de um lexema como um identificador, o analisador lexical insere esse lexema na tabela de símbolos para uso futuro.
  • Lexical analyzer não é eficiente para identificar qualquer erro no programa de origem sozinho.
  • se ocorrer um lexema cujo padrão não corresponde a nenhum dos padrões predefinidos de tokens, você deve executar ações de recuperação de erro para corrigir o erro.

então, isso é tudo sobre a análise lexical que transforma o fluxo de caracteres em tokens e o passa para o analisador. Aprendemos sobre o trabalho da análise lexical com a ajuda de um exemplo. Concluímos a discussão com o erro lexical e sua estratégia de recuperação.

Leave a Reply