Compiladores, Interpretadores e Fases da Análise de Código

Classificado em Computação

Escrito em em português com um tamanho de 3,4 KB

Compilador vs. Interpretador

  • Compilador: Traduz o código-fonte para código de máquina.
  • Interpretador: Executa o código-fonte "diretamente".

Tipos de Compiladores

Compiladores de Uma Passagem

Realizam varredura de símbolos, análise gramatical, verificação de símbolos e fim de arquivo. O programa alvo está completo ao término da leitura do programa-fonte.

Compiladores de Múltiplas Passagens

As fases são "programas" separados, executados sequencialmente. Cada fase lê de um arquivo e escreve em um novo arquivo.

Compiladores de Duas Passagens

Vantagens:
  • Melhor portabilidade.
  • Possibilidade de muitas combinações entre front-ends e back-ends.
  • Otimizações são mais fáceis na representação intermediária do que no código-fonte.
Desvantagens:
  • Lentidão.
  • Maior necessidade de memória.

Fases da Análise de Código

Análise Léxica

Tarefas de um Analisador Léxico:
  • Ignorar e descartar símbolos irrelevantes (espaços em branco, caracteres de tabulação, caracteres de controle como CR e LF) e comentários.
Descrição da Análise Léxica:
  • Esquadrinhar o código-fonte, símbolo a símbolo, compondo tokens e classificando-os.
  • Compor e gerenciar a lista de tokens.
  • Eliminar elementos desnecessários ao processo de compilação.
  • Reconhecer e validar números inteiros e reais.
  • Reconhecer e validar os elementos utilizados como identificadores.
  • Prover um mecanismo para controle de erros amigável.
  • Tratar parâmetros para compilação condicional.

Análise Sintática

A análise sintática tem como objetivos:

  • Comprovar que a sequência de tokens cumpre as regras gramaticais.
  • Gerar a árvore gramatical.
Tipos de Analisadores Sintáticos:
  • Métodos de Cocke-Younger Kasami e Early: Universais, servem para qualquer gramática.

  • Métodos Descendentes (Top-Down): Constroem a árvore sintática de cima para baixo.

  • Métodos Ascendentes (Bottom-Up): Constroem a árvore sintática de baixo para cima, utilizando uma pilha de dados.

Classificação de Erros de Compilação por Fase

  • Identificador não declarado: Não é um erro sintático. (Geralmente semântico)
  • Arquivo-fonte não encontrado: Léxico, pois sem o arquivo-fonte não pode ser feita a análise léxica.
  • Tipo misturado: Semântico, pois a análise semântica distingue o tipo de cada variável.
  • Esperando símbolo 'x': Sintático, pois a ausência de 'x' entra em conflito com a gramática.
  • Esperando fim de comentário: Léxico, pois o analisador léxico não conseguirá gerar os tokens.
  • Símbolo inválido: Léxico, pois o analisador léxico registra a sentença através do autômato finito.
  • Número de parâmetros insuficientes: Sintático, pois a análise sintática gera uma mensagem de erro ao verificar as regras de produção.

Entradas relacionadas: