O documento descreve a estrutura de um compilador, que realiza análise (front end) e síntese (back end) para traduzir uma linguagem fonte para objeto. A análise gera uma representação intermediária do programa, enquanto a síntese gera o programa objeto correspondente. O documento também discute como um compilador é implementado em fases como análise léxica, sintática e semântica.
O documento descreve a estrutura de um compilador, que realiza análise (front end) e síntese (back end) para traduzir uma linguagem fonte para objeto. A análise gera uma representação intermediária do programa, enquanto a síntese gera o programa objeto correspondente. O documento também discute como um compilador é implementado em fases como análise léxica, sintática e semântica.
O documento descreve a estrutura de um compilador, que realiza análise (front end) e síntese (back end) para traduzir uma linguagem fonte para objeto. A análise gera uma representação intermediária do programa, enquanto a síntese gera o programa objeto correspondente. O documento também discute como um compilador é implementado em fases como análise léxica, sintática e semântica.
No processo de traduo de uma linguagem fonte para uma linguagem
objeto, existem duas tarefas bsicas a serem executadas por um compilador: Anlise (front end) = o texto de entrada na linguagem fonte examinado, verificado e compreendido; recebe o programa fonte, verifica as partes constituintes desse programa e impe uma estrutura gramatical sobre elas. Sntese (back end) = o texto de sada, na linguagem objeto gerado, de forma a corresponder ao texto de entrada. Recebe uma representao intermediria do programa e constri o programa para a maquina alvo. Estas duas fases podem ser intercaladas, no necessitando que a anlise seja completamente feita para poder passar para sua gerao do primeiro trecho de cdigo. A tarefa de analise deve ter como resultado uma representao do programa fonte que contenha informao suficiente para a gerao do programa objeto correspondente. Esta representao, conhecida como representao intermediria complementada por tabelas que contem informao adicional sobre o programa fonte.
Tabela de smbolos, guarda para cada identificador (smbolo) as informaes
correspondentes Sintaxe = forma de construo de programas corretos na linguagem; (analise) Semantica = descreve o que acontece quando o programa executado; (gerao de codigo) Por razes de convenincia prtica, a fase de anlise normalmente se subdivide em anlise lxica, anlise sinttica e anlise semntica. Sabe-se que possvel representar completamente a sintaxe de uma linguagem de programao atravs de uma gramtica sensvel ao contexto mas como no existem algoritmos prticos para tratar essas gramticas, a preferncia recai em usar gramticas livres de contexto. Assim, a separao entre anlise sinttica e anlise semntica dependente de implementao: deixa-se para a anlise semntica a verificao de todos os aspectos da linguagens que no se consegue exprimir de forma simples usando gramticas livres de contexto. Por outro lado, sabe-se que a implementao de reconhecedores de linguagens regulares (autmatos finitos) mais simples e mais eficiente do que a implementao de reconhecedores de linguagens livres de contexto (autmatos de pilha). Como possvel usar expresses regulares para descrever a estrutura de componentes bsicos das linguagens de programao, tais como identificadores, palavras reservadas, literais numricos, operadores e delimitadores, essa parte da tarefa de anlise (anlise lxica) implementada separadamente, pela simulao de autmatos finitos. Assim, a anlise lxica tem como finalidade a separao e identificao dos elementos componentes do programa fonte; normalmente esses componentes so especificados atravs de expresses regulares. A anlise sinttica deve reconhecer a estrutura global do programa, descrita atravs de gramticas livres de contexto. A anlise semntica se encarrega da verificao das regras restantes. Essas regras tratam quase sempre da verificao de que os objetos so usados no programa da maneira prevista em suas declaraes, por exemplo verificando que no h erros de tipos.
Formas de Implementar um compilador
Fase = realiza uma funo bem definida no processo de compilao Passo = passagem do programa compilador sobre o programa fonte que est sendo compilado Como definir o numero de passos: -
Memoria Disponvel; Tempo de Compilao; Caractersticas da linguagem; Referencias futuras; Tempo de execuo; tamanho da equipe; prazo para desenvolvimento;
Analisador lxico = (scanner) l o fluxo de caracteres do programa fonte e
agrupa esses caracteres em lexemas; Analisador sinttico = (parser) usa os tokens para produzir uma representao na forma de rvore a fim de representar a estrutura gramatical do fluxo de tokens Estrutura de um compilador 1) Analisador semntico = utiliza a arvore semntica e a tabela de smbolos para verificar a consistncia semntica do programa para a definio da linguagem; 2) Gerao de cdigo intermedirio = representao intermediaria do programa fonte a partir da arvore sinttica;
3) Otimizao de cdigo = algoritmos para melhorar a qualidade do
cdigo intermedirio visando gerar um cdigo de maquina melhor 4) Gerao de cdigo = recebe como entrada a representao intermediria e mapeia esse programa para a linguagem alvo (cdigo de maquina)