Você está na página 1de 6

Conceitos Bsicos Um compilador um programa que traduz um outro programa de uma linguagem (de mais alto nvel) para

a outra ( de mais baixo nvel). A linguagem original chamada de fonte e afinal de destino. Durante o processo de compilao, vrios tipos de erros. Podem ser identificados, devendo ser notificados aos usurios do compilador. Os compiladores constituem-se em uma categoria constituem-se em uma categoria de programas produtos. As outras categorias so apresentadas a seguir: Montadores (Assemblers): Traduzem programas codificados em linguagem simblica (assembly) para instrues em linguagem de mquina. Normalmente, a relao de instrues de uma para uma. Macro-Assemblers: Traduzem instrues macro, codificadas em linguagem simblica para um conjunto de instrues na mesma linguagem. Processadores ou filtros: Traduzem instrues codificadas em uma linguagem de alto nvel estendida para instrues da linguagem de programao original, ou seja, a traduo feita entre duas linguagens de alto nvel. Decompiladores e desmontadores: programas que realizam o processo inverso ao normalmente realizado pelo outros tipos de tradutores. A partir do cdigo objeto, obtido o cdigo simblico. Interpretadores: programas que traduzem programas codificados em linguagem de programao codificados em linguagem de programao de alto nvel para um cdigo intermedirio, que realiza a execuo do algoritmo original, sem traduzi-lo para a linguagem de mquina. Alguns interpretadores analisam um comando fonte cada vez que este deve ser executado o que consome muito tempo e raramente utilizado. A forma mais utilizada. Os interpretadores geralmente so mais lentos que os compiladores, j que a execuo do cdigo intermedirio tem embutido o custo do processamento de uma traduo virtual para cdigo de mquina, cada vez que uma instruo deve ser operada entre os interpretadores tem a ser seguintes vantagens. Facilitam a implementao de construes complexas de linguagem de programao. So mais adequados para a implementao de novas linguagens de programao para diferentes equipamentos de computao.

A execuo de um progrma escrito em uma linguagem de alto nvel feita em dois passos: 1. O programa fonte compilado, sendo gerado o programa objetos. 2. Os dados de entrada so submetidos ao programa objetos produz os resultados. A compilao formada por duas etapas gerais: anlise, onde o programa na linguagem fonte dividido em partes e uma representao intermediaria criada a sntese onde o programa linguagem destino construdo, a partir da representao intermediria. Um exemplo de representao intermediria comumente utilizada arvore de sintaxe: Arvore de sintaxe da expresso A:=b+c*d

A fase de analise construda pelas seguintes sub faces: Analise lxica Analise sinttica Analise semntica Fases de um compilador

Analise Lxica O objetivo da analise lxica identificar seqncia de caracteres que se constituem em Tokens. Os tokens constituem-se em classes de smbolos tais como palavras reservadas delimitadores e operadores, podendo ser representada internamente no caso de identificadores , que podem ser varveis declaradas e utilizadas no programa, os tokens so representados por pares ordenados, onde o primeiro indica a classe do smbolo (identificador) e o segundo um apontador para uma entrada na tabela de simbolos. A analise lxica da expresso a : = b+c * d + e gera como sada os seguintes tokens. 1. O identificador a, sendo representado pelo par ordendo. (id, S1). 2. O operador de atribuio:=; 3. O identificador b, (id, 6); 4. O operador de adio +; 5. O identificador c (id, 7); 6. O operador de multiplicao *; 7. O identificador d; 8. O operador da adio +; 9. O identificador e.

Os espaos em branco que separam os tokens so geralmente desconsiderados durante a anlise lxica. Normalmente o analisador lxico uma sub-rotina do sinttico. Durante o reconhecimento das produes sintticas, cada vez que um token deve ser conhecido, o analisador lxico chamado, retomando o prprio token ou o apontador para a tabela de smbolos. Anlise sinttica A etapa de analise sinttica tambm conhecida como parsing. Os token do programa so agrupados em sentenas da gramtica que especifica a linguagem de programaes. Uma estrutura hierarquia normalmente representada atravs de representada atravs de regras recursivas, tais como. 1. Qualquer identificador uma expresso; 2. Qualquer nmero uma expresso; 3. Se expresso e expresses, ento tambm o so expresso + expresso, expresso* expresso. Erros de sintaxe so detectados nesta fase, podendo-se identificar objetivamente a posio do erro ocorrido e o seu tipo. Os analisadores sintticos geralmente incluem rotinas de recuperao de erros, que permitem que, mesmo aps encontrado um erro sinttico, a analise do texto restante continue. As regras gramaticais que definam as construes da linguagem podem ser descritas atravs de produes, cujos, elementos incluem smbolos terminais que fazem parte do cdigo fonte e smbolos no terminais ( que geram outras regras). Anlise Semntica

A anlise semntica tem o objetivo de determinar se as estruturas sintticas fazem sentido. Por exemplo, o comando IF, sintaticamente correto, pode existir em um programa: IF a > 7 themb:=5 elseb:= 10; Entrando, caso a varivel a seja do tipo String, a comparao realizada com um nmero no est semanticamente correta. Tal verificao pode ser pelo analisador semntico consultando as informaes que constam na tabela de smbolos. Por isso o analisador semntico atua juntamente com o analisador sinttico. Gerao de cdigo intermedirio

O gerador do cdigo intermedirio feita a partir da representao interno do programa, produzida pelo analisador sinttico, gerando como sada, uma seqncia de cdigo. Este cdigo , posteriormente, traduzido para o cdigo objeto. Esta representao intermediria tem as seguintes vantagens: Possibilita a otimizao do cdigo intermedirio, a fim de obter cdigo objeto final mais eficiente; Resolve de maneira gradual, problemas da passagem do cdigo fonte para objeto. A separao de cdigo intermedirio geralmente feita juntamente com as fases de anlise sinttica e semntica. A maior diferena entre o cdigo intermedirio o cdigo objeto que o intermedirio no especifica detalhes de baixo nvel de implementao, tais como endereos de memrias e registradores entre outros. Otimizao de cdigo O objetivo desta fase de otimizar o cdigo intermedirio em termos de velocidade e de utilizao da memria. Separao de cdigo Os objetivos desta fase da compilao so produo de cdigo objeto, alocao de memria para dados e variveis, separao de cdigo para acessar a posio de memria e seleo de registradores entre outros. Gerncia de tabela Este processo no uma fase da compilao, mas compreende um conjunto de tabelas e rotinas associadas que so utilizadas por quase todas as fases do compilador. A tabela de smbolos normalmente utilizada no processo de compilao, armazenas as seguintes informaes: Declaraes de variveis, declarao dos procedimentos ou sub-rotinas e parmetros destas sub-rotinas. A cada ocorrncia de 1 identificador no programa fonte, a tabela acessada o identificador pesquisado. Quando encontrado as informaes associadas a ele so comparadas com as informaes. Estas so inseridas na tabela. Os seguintes atributos so armazenados, para cada categoria de informaes: Variveis: classe, tipo, endereo no texto, preciso e tamanho; Parmetros formais: Classe, tipo, mecanismo de passagem; Procedimentos e sub-rotinas: Classe e nmero de parmetro.

Você também pode gostar