Humm
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éxico
Analisador 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 as palavras-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 (valores inteiros).
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 simples