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.