Você está na página 1de 2

Departamento de Eletrnica da Universidade Tecnolgica Federal do Paran Prof. Bertoldo Schneider Jr.

Resumo sobre o conceito de Compilao Quando se fala em programas, geralmente se est falando dos cdigosfonte escritos em linguagens de programao de alto nvel, i.e., com um nvel de abstrao muito grande, mais prximo do modo de pensar de nosso crebro do que das mquinas. Em oposio, um cdigo objeto ou cdigo executvel um cdigo feito numa linguagem de baixo nvel de abstrao, muito mais prxima do modo de funcionamento das mquinas do que do raciocnio humano. Quando se fala em programao, existem duas maneiras de se transformar um programa escrito em uma linguagem de programao qualquer em um cdigo capaz de ser executado por um dispositivo computacional. Uma delas atravs de um compilador, que gera um cdigo executvel que pode ser executado a qualquer momento por determinada arquitetura. A outra atravs do interpretador, onde o cdigo-fonte geralmente interpretado e executado (linha a linha, conforme vai executando) somente no instante em que se precisa do mesmo. Existem compiladores que compilam somente quando o cdigo fonte chamado, processo facilmente confundvel com o interpretador. O C e o C++ so linguagem compiladas enquanto o Javascript e o C# so interpretadas. Um compilador um programa que transforma um cdigo fonte (cdigo escrito em uma linguagem de programao) em um outro cdigo, chamado cdigo objeto, para uma determinada arquitetura (hardware especfico ou genrico). Para fazer isso, o compilador atravessa algumas etapas definidas, como: 1.- Identificao de Tokens: Tokens (estruturas de retorno: Um token uma seqncia de um ou mais caracteres (caracter, segmento de texto ou smbolo) que possuem um significado (absoluto ou relativo ao contexto: por exemplo, o * tem um significado quando operador unrio e outro quando binrio) conhecido (por um parser) dentro da gramtica da linguagem utilizada. 2- Anlise: O objetivo da anlise entender o cdigo fonte e represent-lo em uma forma intermediria, fornecendo todos os subsdios necessrios para a sntese e pode ser subdividida ainda em anlise lxica, anlise sinttica e anlise semntica. 2.1.- Anlise lxica: A anlise lxica transforma o cdigo fonte em uma seqncia de smbolos lxicos (lexical tokens) para que o compilador possa manipul-los mais facilmente. Ela tambm verifica se todos os tokens so reconhecveis, i.e., se pertencem linguagem ou foram construdos conforme as regras gramaticais da mesma ( nesta fase que so detectados strings que foram mal escritos como por exemplo, quando se troca printf por print em linguagem C. O analisador lxico funciona em dois estgios: No primeiro estgio, os caracteres so lidos um a um e reconhecidos (ou no) para formarem o conjunto lxico do programa. No segundo estgio, cada lxico valorado e tipificado, i.e., cada elemento recebe valor e tipo (ou demais atributos), quando passam a constituir um smbolo (nesta etapa, parnteses no tm valor algum e no retornam nada nesta

Departamento de Eletrnica da Universidade Tecnolgica Federal do Paran Prof. Bertoldo Schneider Jr. anlise). Neste ponto, os tokens so renomeados apropriadamente, aumentando a eficincia da programao, e o analisador passa a fase da anlise sinttica. Este processo um dos mais demorados da compilao. 2.2.- Anlise sinttica: O analisador sinttico que d significado s seqncias de tokens, analisando a relao entre os mesmos dentro de cada declarao (frase). Logo aps, o compilador procede a anlise semntica. 2.3.- Anlise semntica: A anlise semntica, terceira fase da compilao, onde se analisa o significado de cada elemento em relao declarao e onde se detecta os erros semnticos, tais como o uso incorreto de variveis de tipos diferentes numa multiplicao. Terminada esta fase, tem-se a representao intermediria do processo e o compilador d incio gerao do cdigo objeto intermedirio, primeira fase da sntese. 3.- Sntese: A sntese constri o cdigo objeto a partir desta representao intermediria, nas seguintes etapas, no necessariamente obrigatrias. 3.1.- Gerao do cdigo objeto intermedirio: 3.2.- Otimizao do Cdigo intermedirio, para uma determinada arquitetura X. Por isso mesmo, o compilador conhecido como compilador para arquitetura X (Um hardware especfico e um sistema operacional especfico). 3.3.- Gerao do programa executvel, escrito no cdigo da mquina na qual se quer rodar o programa. Resumo: Cdigo Fonte (em txt) -> Anlise Sinttica, Lxica e Semntica -> Gerao de cdigo intermedirio ->> Otimizao de cdigo ->> Cdigo objeto otimizado para arquitetura x ->> programa executvel (cdigo de mquina), ou pr-executvel, quando h necessidade de se usar o linker. Ligador ou Linker: Separadamente do compilador, h um outro programa cuja funo ligar vrios objetos, programas, sub-programas, rotinas, funes j independente e previamente compilados para unific-los coerentemente num nico programa executvel. Declarao (declaration or statement): uma orao completa conforme as regras gramaticais de uma determinada linguagem. Por exemplo, x=a+sqrt(y); uma declarao completa, terminada em ;.