Tradutores: Compiladores e Interpretadores
Introdução: Tradutores
Tradutores são programas que têm por finalidade principal realizar a tradução de uma linguagem de programação em outra: a primeira é a linguagem fonte e a segunda é a linguagem objeto, sendo que o resultado do processo de conversão (linguagem objeto) deve ser equivalente, ou seja, apresentar o mesmo propósito do conteúdo da linguagem inicial (linguagem fonte). Dessa forma, verifica-se que o objetivo geral dos tradutores é fazer a comunicação entre o Software – programa escrito em uma linguagem de programação – e o Hardware – equipamento responsável pela execução física das instruções lógicas. Entre os tradutores, os mais conhecidos são os seguintes: Compiladores, Interpretadores, Montadores (“Assemblers”) e Máquina Virtual.
Esquematicamente, tem-se:
Introdução: Tradutores
Tradutores são programas que têm por finalidade principal realizar a tradução de uma linguagem de programação em outra: a primeira é a linguagem fonte e a segunda é a linguagem objeto, sendo que o resultado do processo de conversão (linguagem objeto) deve ser equivalente, ou seja, apresentar o mesmo propósito do conteúdo da linguagem inicial (linguagem fonte). Dessa forma, verifica-se que o objetivo geral dos tradutores é fazer a comunicação entre o Software – programa escrito em uma linguagem de programação – e o Hardware – equipamento responsável pela execução física das instruções lógicas. Entre os tradutores, os mais conhecidos são os seguintes: Compiladores, Interpretadores, Montadores (“Assemblers”) e Máquina Virtual.
Esquematicamente, tem-se:
A figura já foi colocada por Kelly!
Figura 1 (Esquema geral de funcionamento de um Tradutor)
Definição
Compiladores
Compiladores são tipos de tradutores que possuem uma forma específica de conversão, pois atuam na transformação de uma linguagem de alto nível (próxima do entendimento humano) para uma linguagem de baixo nível – linguagem de máquina (reconhecida pelo hardware do computador).
Os compiladores podem ser assim esquematizados:
A figura já foi colocada por Kelly!
Figura 2 (Esquema específico de um Compilador)
Além de realizar o processo de conversão, os compiladores também são responsáveis, na maioria das vezes, pela execução de outras tarefas que mantém relação com a principal, tais como: detecção de erros e a permissão para a inclusão de comentários. A detecção de erros é implantada através de mecanismos que além de identificar, recupera e elabora relatório de todas as incorreções encontradas no programa, eliminando com isso a necessidade de o mesmo ser submetido ao compilador toda vez que um novo erro ocorrer. A permissão de inclusão de comentários à linguagem fonte, seja por meio da estrutura da sintaxe desta ou recursos do próprio compilador, é uma ferramenta que contribui para uma melhor documentação do programa.
Estrutura dos Compiladores
Os compiladores no que diz respeito a sua estrutura estão divididos em três grandes partes ou módulos funcionais descritos da seguinte forma: Análise Léxica, Análise Sintática e Análise Semântica.
Análise Léxica
É o módulo do compilador que faz a comunicação entre a linguagem fonte e a Análise Sintática. Para isso, tem como tarefa principal a fragmentação do conteúdo fonte, a identificação e a classificação das partes componentes do mesmo (átomos ou tokens). A Análise Léxica utiliza-se de um conjunto de operações, ou melhor, funções para atingir o propósito pelo qual foi elaborada. A seguir são descritas as principais funções da Análise Léxica: Extração e Classificação de Átomos, Eliminação de Delimitadores e Comentários, Conversão Numérica, Tratamento de Identificadores, Tratamento de Palavras Reservadas, Recuperação de Erros e as Funções Auxiliares (Geração de Tabelas de Referências Cruzadas, Definição e Expansão de Macros, Interação com o Sistema Operacional, Controle de Compilação Condicional e Geração e Controle de Listagem).
Extração e Classificação de Átomos
É responsável por mapear o texto fonte em outro formato de texto que será constituído pelos átomos extraídos e classificados a partir daquele. Entre os átomos dessa etapa, encontram-se os seguintes: identificadores, números inteiros sem sinal, números reais, palavras reservadas, cadeias de caracteres (“strings”), operadores, sinais de pontuação, comentários, símbolos compostos e caracteres especiais.
Eliminação de Delimitadores e Comentários
Operação que remove os delimitadores, ou seja, os espaços em branco ou símbolos especiais e os comentários, visto que, não são necessários para a geração de código, embora sejam muito úteis na legibilidade do texto fonte.
Conversão Numérica
Esta função tem como finalidade pegar as cadeias de caracteres que representam números e os números que estão em diversas notações e convertê-los para uma forma em que possam ser manipulados pelas outras operações do compilador.
Tratamento de Identificadores
É a operação que cria uma tabela de identificadores na qual são armazenados, de forma padronizada, os identificadores (em geral, com tamanhos variáveis) e associa os mesmos a índices únicos para que possam ser referenciados de maneira mais simples.
Tratamento de Palavras Reservadas
As palavras reservadas são inicialmente tratadas como identificadores pela maioria dos analisadores léxicos. Em seguida, tais identificadores são comparados ao conjunto de palavras reservadas da linguagem em que o compilador fará a conversão, se os mesmos estiverem neste conjunto, recebem a classificação de palavras reservadas e vão para uma tabela que, em geral, é a mesma em que estão os identificadores.
Recuperação de Erros
Caracteres não identificados e cadeias de caracteres que não obedecem à classificação dada as classes de átomos reconhecidas pelo analisador léxico são identificados como erros léxicos.
Funções Auxiliares
Geração de Tabelas de Referências Cruzadas
Função que armazena em uma tabela os átomos encontrados e a localização destes no texto fonte.
Definição e Expansão de Macros
É a substituição das abreviaturas, que algumas linguagens possibilitam como recurso, pelo texto expandido e livre de definições e chamadas de macro.
Interação com o Sistema Operacional
É a interação entre o analisador léxico e o Sistema Operacional no que se refere ao acesso de arquivos necessários para a análise.
Controle de Compilação Condicional
É o mecanismo que possibilita, através de alguns parâmetros de compilação, a compilação de partes do texto fonte, omitindo-se as demais partes.
Geração e Controle de Listagem
Função que permite ao programador ativar e desativar opções de listagem, de coleta de símbolos em tabelas de referências cruzadas, de geração e impressão de tais tabelas, de impressão de tabelas e símbolos do programa compilador, de tabulação e formatação das saídas impressas do programa fonte.
Análise Sintática
A Análise Sintática tem como objetivo fazer a análise do texto fonte oriundo da Análise Léxica e que está em forma de átomos. Esta etapa atua de forma interativa, pois se comunica com o Analisador Léxico, os processos de geração de código e a Análise Semântica.
Para cumprir sua tarefa, a Análise Sintática possui algumas funções, como as descritas a seguir: Falta fazer o resumo!
Análise Semântica
A última parte ou módulo funcional de um compilador refere-se ao ato final de converter o programa fonte em programa objeto. No entanto, para que o código objeto esteja pronto se faz necessária à participação das ações semânticas. Assim como os outros módulos do compilador (Análise Léxica e Análise Sintática), a Análise Semântica também se subdivide em funções internas e integradas que ao serem realizadas contribuem para resolver as tarefas dessa fase. As principais são: Falta fazer o resumo!
Figura 1 (Esquema geral de funcionamento de um Tradutor)
Definição
Compiladores
Compiladores são tipos de tradutores que possuem uma forma específica de conversão, pois atuam na transformação de uma linguagem de alto nível (próxima do entendimento humano) para uma linguagem de baixo nível – linguagem de máquina (reconhecida pelo hardware do computador).
Os compiladores podem ser assim esquematizados:
A figura já foi colocada por Kelly!
Figura 2 (Esquema específico de um Compilador)
Além de realizar o processo de conversão, os compiladores também são responsáveis, na maioria das vezes, pela execução de outras tarefas que mantém relação com a principal, tais como: detecção de erros e a permissão para a inclusão de comentários. A detecção de erros é implantada através de mecanismos que além de identificar, recupera e elabora relatório de todas as incorreções encontradas no programa, eliminando com isso a necessidade de o mesmo ser submetido ao compilador toda vez que um novo erro ocorrer. A permissão de inclusão de comentários à linguagem fonte, seja por meio da estrutura da sintaxe desta ou recursos do próprio compilador, é uma ferramenta que contribui para uma melhor documentação do programa.
Estrutura dos Compiladores
Os compiladores no que diz respeito a sua estrutura estão divididos em três grandes partes ou módulos funcionais descritos da seguinte forma: Análise Léxica, Análise Sintática e Análise Semântica.
Análise Léxica
É o módulo do compilador que faz a comunicação entre a linguagem fonte e a Análise Sintática. Para isso, tem como tarefa principal a fragmentação do conteúdo fonte, a identificação e a classificação das partes componentes do mesmo (átomos ou tokens). A Análise Léxica utiliza-se de um conjunto de operações, ou melhor, funções para atingir o propósito pelo qual foi elaborada. A seguir são descritas as principais funções da Análise Léxica: Extração e Classificação de Átomos, Eliminação de Delimitadores e Comentários, Conversão Numérica, Tratamento de Identificadores, Tratamento de Palavras Reservadas, Recuperação de Erros e as Funções Auxiliares (Geração de Tabelas de Referências Cruzadas, Definição e Expansão de Macros, Interação com o Sistema Operacional, Controle de Compilação Condicional e Geração e Controle de Listagem).
Extração e Classificação de Átomos
É responsável por mapear o texto fonte em outro formato de texto que será constituído pelos átomos extraídos e classificados a partir daquele. Entre os átomos dessa etapa, encontram-se os seguintes: identificadores, números inteiros sem sinal, números reais, palavras reservadas, cadeias de caracteres (“strings”), operadores, sinais de pontuação, comentários, símbolos compostos e caracteres especiais.
Eliminação de Delimitadores e Comentários
Operação que remove os delimitadores, ou seja, os espaços em branco ou símbolos especiais e os comentários, visto que, não são necessários para a geração de código, embora sejam muito úteis na legibilidade do texto fonte.
Conversão Numérica
Esta função tem como finalidade pegar as cadeias de caracteres que representam números e os números que estão em diversas notações e convertê-los para uma forma em que possam ser manipulados pelas outras operações do compilador.
Tratamento de Identificadores
É a operação que cria uma tabela de identificadores na qual são armazenados, de forma padronizada, os identificadores (em geral, com tamanhos variáveis) e associa os mesmos a índices únicos para que possam ser referenciados de maneira mais simples.
Tratamento de Palavras Reservadas
As palavras reservadas são inicialmente tratadas como identificadores pela maioria dos analisadores léxicos. Em seguida, tais identificadores são comparados ao conjunto de palavras reservadas da linguagem em que o compilador fará a conversão, se os mesmos estiverem neste conjunto, recebem a classificação de palavras reservadas e vão para uma tabela que, em geral, é a mesma em que estão os identificadores.
Recuperação de Erros
Caracteres não identificados e cadeias de caracteres que não obedecem à classificação dada as classes de átomos reconhecidas pelo analisador léxico são identificados como erros léxicos.
Funções Auxiliares
Geração de Tabelas de Referências Cruzadas
Função que armazena em uma tabela os átomos encontrados e a localização destes no texto fonte.
Definição e Expansão de Macros
É a substituição das abreviaturas, que algumas linguagens possibilitam como recurso, pelo texto expandido e livre de definições e chamadas de macro.
Interação com o Sistema Operacional
É a interação entre o analisador léxico e o Sistema Operacional no que se refere ao acesso de arquivos necessários para a análise.
Controle de Compilação Condicional
É o mecanismo que possibilita, através de alguns parâmetros de compilação, a compilação de partes do texto fonte, omitindo-se as demais partes.
Geração e Controle de Listagem
Função que permite ao programador ativar e desativar opções de listagem, de coleta de símbolos em tabelas de referências cruzadas, de geração e impressão de tais tabelas, de impressão de tabelas e símbolos do programa compilador, de tabulação e formatação das saídas impressas do programa fonte.
Análise Sintática
A Análise Sintática tem como objetivo fazer a análise do texto fonte oriundo da Análise Léxica e que está em forma de átomos. Esta etapa atua de forma interativa, pois se comunica com o Analisador Léxico, os processos de geração de código e a Análise Semântica.
Para cumprir sua tarefa, a Análise Sintática possui algumas funções, como as descritas a seguir: Falta fazer o resumo!
Análise Semântica
A última parte ou módulo funcional de um compilador refere-se ao ato final de converter o programa fonte em programa objeto. No entanto, para que o código objeto esteja pronto se faz necessária à participação das ações semânticas. Assim como os outros módulos do compilador (Análise Léxica e Análise Sintática), a Análise Semântica também se subdivide em funções internas e integradas que ao serem realizadas contribuem para resolver as tarefas dessa fase. As principais são: Falta fazer o resumo!
Referência Bibliográfica
NETO, João José. Introdução à compilação. Rio de Janeiro: Livros Técnicos e Científicos, 1987.
Nenhum comentário:
Postar um comentário