Humm

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1457 palavras )
  • Download(s) : 0
  • Publicado : 15 de outubro de 2012
Ler documento completo
Amostra do texto
COMPILADORES

Exercícios sobre tradutores, estrutura de um tradutor, análise léxica e sintática.
1. A figura abaixo representa as fases de análise e de síntese de um compilador. Explique em linhas gerais cada componentes da figura, mencionando entrada e saída e dando exemplos.
Analisador LéxicoAnalisador Sintático
Analisador Semântico

Gerador de Código Intermediário

Otimizador de Código
Gerador de Código

Gerenciador da Tabela de Símbolos

Tratador de Erros
Programa Fonte
Programa Alvo

Na primeira fase, um módulo chamado analisador léxico (scanner), lê o programa fonte caracter a caracter, agrupando a seqüência de caracteres lidos em grupos de símbolos (tokens). Os símbolos são aspalavras-chaves tais como BEGIN e THEN, nomes (identificadores) de variáveis e procedimentos tais como X e SOMA, operadores tais como + e <=, e símbolos de pontuação tais como parênteses e ponto-e-vírgula.
A saída do analisador léxico é uma seqüência de símbolos que é passada para a próxima fase, o analisador sintático. Os símbolos nessa seqüência são geralmente representados por códigos (valoresinteiros).
O analisador sintático (parser) agrupa os símbolos recebidos do analisador léxico em estruturas sintáticas. Os três símbolos representando A + B poderiam ser agrupados em uma estrutura sintática chamada expressão. Expressões poderiam ser posteriormente agrupadas para formar comandos, e assim por diante.
O analisador semântico verifica se estruturas sintáticas pelo analisador sintático,embora corretas sintaticamente, têm significado admissível na linguagem. Por exemplo, A + B pode ser uma expressão
sintaticamente correta, mas pode não ter significado em muitas linguagens se A for inteiro e B for caracter.
O gerador de código intermediário usa as estruturas produzidas pelo analisador sintático e verificadas pelo analisador semântico para criar uma seqüência de instruções simplesdita código intermediário (está entre a linguagem de alto nível e a linguagem de baixo nível).
O otimizador de código (independente de máquina) é um módulo opcional (presente na grande maioria dos compiladores) que objetiva melhorar o código intermediário de modo que o programa objeto produzido ao fim da compilação seja menor (ocupe menos espaço de memória) e/ou mais rápido (tenha tempo de execuçãomenor). A saída do otimizador de código é um novo código intermediário.
O gerador de código produz o código objeto final, tomando decisões com relação à alocação de espaço para os dados do programa, selecionando a forma de acessá-los, definindo que registradores da UCP serão usados, etc. Projetar um gerador de código que produza programas objeto verdadeiramente eficientes é uma das tarefas maisdifíceis no projeto de um compilador.
A maioria dos compiladores atuais tem, como parte integrante de seu gerador de código, um módulo adicional de otimização de código dependente de máquina que tem por objetivo melhorar o código de máquina produzido para melhor aproveitar os recursos específicos da arquitetura para a qual foi gerado.
O módulo de gerência de tabela de símbolos tem por funçãoguardar informações a respeito de todos os nomes usados pelo programa e registrar informações importantes associadas a cada um, tais como seu tipo (inteiro, real, etc.), tamanho, escopo, etc. A estrutura de dados usada para registrar essas informações é chamada tabela de símbolos.
Finalmente, o manipulador de erros é ativado sempre que for detectado um erro no programa fonte. Ele deve avisar oprogramador da ocorrência do erro emitindo uma mensagem, e ajustar-se novamente à informação sendo passada de fase a fase de modo a poder completar o processo de compilação (mesmo que não seja mais possível gerar código objeto, a análise léxica e sintática deve prosseguir até o fim).
Os módulos de gerência de tabela de símbolos e manipulação de erros interagem sempre com todos os outros módulos do...
tracking img