Escolar Documentos
Profissional Documentos
Cultura Documentos
Ana Madureira
Engenharia Informtica Ano Lectivo: 2011/2012
Tpicos de Discusso:
Linguagens de Programao Linguagens Formais Cdigo Fonte Cdigo Mquina Linguagem fonte/alvo Compiladores Cross-compiler Bootstrapping
Evoluo
Tpicos de Discusso:
Linguagens de Programao -Linguagens formais utilizadas na descrio de mecanismos abstractos. Tm como objectivo descrever e comunicar um processo computacional. Linguagens Formais - conjunto de cadeias de smbolos (palavras) de determinado alfabeto. Cdigo Fonte - Linguagens de alto nvel (algortmicas, imperativas, procedimentais, etc..) Cdigo Mquina Linguagem de baixo nvel Compilador - programa, capaz de ler um ficheiro (normalmente de texto) contendo um programa escrito numa dada linguagem de programao e gerar um programa em linguagem alvo equivalente ao programa inicial
Sistema de Computao
Hardware Software
Software de Sistema
Sistema Operativo Software de Linguagens (Tradutores, compiladores,...) Utilitrios (editores, )
Software de Desenvolvimento
Ambientes de programao SGBD- Sistemas de Gesto de Bases de Dados Folhas Clculo,...
Aplicaes
Packages Aplicaes por medida
Software de Linguagens
Integram-se neste grupo programas especiais que se encarregam da traduo de programas escritos numa linguagem de programao para linguagem mquina. Um computador pode utilizar programas escritos em vrias linguagens de programao embora s entenda a linguagem mquina.
Tradutores
Assembler (o primeiro tradutor) Linguagem de baixo nvel (Assembly) (1 instruo da linguagem -> 1 instruo mquina) Compiladores e Interpretadores - Linguagens de alto nvel (1 instruo da linguagem -> vrias instrues mquina) A principal diferena entre um compilador e um interpretador: - o compilador traduz o programa fonte no programa em linguagem mquina que depois executado como um todo. - O interpretador traduz e executa instruo a instruo at concluir o programa.
COMPILADOR
Um COMPILADOR um programa que l um programa escrito numa linguagem (a linguagem fonte) e o traduz num programa equivalente numa outra linguagem a linguagem objecto), identificando a presena de erros no programa fonte.
Compilao o processo de traduo de um programa escrito em linguagem de alto nvel para cdigo em linguagem de mquina.
Funes do compilador
Funo principal: traduzir uma linguagem (fonte) noutra (alvo) Programa fonte: geralmente uma linguagem de alto nvel Programa alvo: geralmente cdigo mquina Outras caractersticas:
reconhecer os programas fonte legais (e ilegais) gerar cdigo mquina correcto gerir a colocao em memria de dados e cdigo gerar o cdigo mquina num formato reconhecido por outros componentes do sistema de desenvolvimento de software (linkers e loaders)
Contexto de um compilador
Um compilador traduz um programa de uma linguagem textual, facilmente entendida por um ser humano, para linguagem mquina, especfica para um processador e um sistema operativo. Em algumas linguagens de programao, o compilador tem o papel de converter o cdigo fonte num cdigo chamado Bytecode (cdigo em bytes), que um estado intermdio entre o cdigo-fonte (escrito numa linguagem de programao especfica) e a aplicao final. Como exemplo de linguagens que utilizam bytecode temos: Java, C# e Lua.
Processo de Compilao
O processo de compilao em duas fases: Anlise Divide o texto fonte em partes Cria representao intermdia Independente da mquina Sntese Constri programa-alvo a partir de cdigo intermdio Dependente da mquina
Caractersticas Existncia de uma representao intermdia do programa fonte (mquina abstracta) A vanguarda mapeia o programa fonte numa representao intermdia A retaguarda produz o cdigo mquina (mquina concreta) a partir da representao intermdia Simplifica a produo de compiladores para vrias mquinas concretas Simplifica a produo de compiladores para vrias linguagens fonte Duas passagens cdigo mais eficiente que numa nica passagem
Front end
Funes:
Reconhecer programas vlidos Produzir mensagens de erro Produzir a representao intermdia Produzir um mapa de armazenamento preliminar
Back end
Funes:
Traduzir a representao intermdia em cdigo mquina Escolher as instrues correspondentes a cada operao definida na representao intermdia Decidir que informao manter nos registos do processador Assegurar a concordncia com os formatos usados por outros componentes do sistema de desenvolvimento de software
Anlise lxica
Agrupa sequncias de caracteres em tokens - as unidades bsicas da sintaxe Nesta fase realizada uma Anlise linear do cdigo fonte,o ficheiro de entrada varrido carcter a carcter->varrimento.
Smbolos especiais (espao em branco, smbolos de pontuao e new line) so utilizados para estabelecer os limites das palavras. Eliminao de espaos em branco e comentrios. Durante a anlise lxica, as palavras ou lexemas so guardados na tabela de smbolos e classificados de acordo com a linguagem, em palavras reservadas, comandos, variveis e tipos bsicos. Identificao de erros lxicos ("overflow" de campo numrico, uso de smbolos no pertencentes ao alfabeto da linguagem). Agrupamento de caracteres em sequncias com um determinado significado tokens
Identificador y Smbolo de atribuio = Identificador x Sinal + Carcter 'a' Smbolo de terminao ;
Exemplo: y = x + 'a';
Anlise sintctica
responsvel pela verificao da correcta formao dos comandos da linguagem, de acordo com as regras especificadas pela gramtica da linguagem. Agrupamento hierrquico dos tokens. Regras recursivas Definio recursiva duma expresso
um identificador uma expresso um nmero uma expresso se e1 e e2 so expresses, ento e1 + e2, e1 * e2, (e1) tambm so expresses
Anlise Semntica
Trata da apreenso do significado associado concretizao das estruturas sintcticas identificadas na fase anterior A apreenso do significado num compilador implementa-se pelo clculo de uma srie de atributos (valores que caracterizam) associados s classes sintcticas definidas na gramtica da linguagem Exemplos de atributos:
Tipos dos identificadores (variveis, procedimentos, classes, ) Tipos e valores das constantes (literais) endereos de armazenamento na memria (relativos)
Calculados os atributos so efectuadas algumas verificaes, principalmente para evitar a existncia de inconsistncias, tais como:
Os identificadores foram previamente declarados Numa expresso os tipos dos operandos e operadores so compatveis
10
anlise semntica) Lineares: Sequncia de instrues para uma mquina genrica e abstracta
Existem vrias formas: mquinas de 0 ou 1 endereos (mquinas de stack; p-code) mquinas de 2 endereos (prximas de alguns processadores reais) mquinas de 3 endereos (de mais alto nvel) Hbridas: Grafos de fluxo entre blocos de instrues
Algumas optimizaes:
Reconhecer e propagar valores constantes Mover clculos para locais onde o nmero de execues menor Reconhecer clculos redundantes e elimin-los Remover cdigo que redundante ou inalcanvel
11
Exemplo: Compilao de uma instruo de atribuio de uma dada linguagem de acordo com as regras gramaticais:
Atribuio a compilar: ... position := initial + rate * 60
12
Tabela de smbolos
Estrutura de dados onde guardada toda a informao relativa aos identificadores utilizados no programa fonte
acedida por, quase, todos os mdulos do compilador
Os mdulos de anlise criam as entradas na tabela, e medida que vo recolhendo informao sobre os identificadores vo-na a armazenando Os mdulos de sntese usam essa informao para gerar cdigo intermdio ou final
A tabela de smbolos deve suportar eficientemente operaes de criao, consulta e remoo de entradas, em diversos nveis (scopes) Informao tipicamente armazenada na tabela de smbolos:
nome do identificador (lexema) - geralmente funciona como chave tipo do identificador e outros atributos (local, global, codificvel, etc) endereo (relativo) onde se situa a entidade representada pelo identificador (varivel, procedimento, funo, etc.)
13
Lo
Pascal
Cdigo 68000
Descrio em cascata
14
Cross-Compiler
Pascal Cdigo 68000 C C PDP11 PDP11 PDP11 Pascal Cdigo 68000
Cross-compiler: compilador que corre sobre uma mquina e gera cdigo objecto para outra mquina
Cross-compiler
Um compilador pode ser escrito em qualquer linguagem, mas existem ferramentas prprias para o seu desenvolvimento (ex: FLEX, LEX, YACC, BISON) e linguagens capazes de expressar de forma clara uma determinada estrutura (ex: C, Pascal, Algol 68, etc).
Bootstrapping
A tcnica de bootstrapping consiste na construo de um compilador, usando uma linguagem de implementao L, que compile a prpria linguagem L. usada para:
obter um novo compilador de uma linguagem L2, usando um compilador j existente de uma linguagem L1, em que L1 um subconjunto de L2 obter um novo compilador mais optimizado da mesma linguagem
15