Escolar Documentos
Profissional Documentos
Cultura Documentos
1/52
Compiladores
Aula 02
Introduo
2/52
Introduo
Compiladores. Para que servem?
Introduo
Especificao/Implementao de Linguagens de Programao Uso geral: novas, extenses e atualizaes Especfico: Tempo Real, robtica, descrio de hardware, sistema operacional, banco de dados (BI), protocolos, interfaces Uso de tcnicas/ferramentas em outros sistemas Processamento de texto (Word), linguagens naturais (google translator) Entender melhor as Linguagens de Programao Escolha e uso mais racional/eficiente Estudos avanados Pesquisa e ps-graduao
3/52
Introduo
Compiladores, Filtros e Pr-processadores
Nos computadores antigos os compiladores muitas vezes exerciam o seu papel como programas autnomos, exigindo uma interao direta com o programador com operaes especficas e manuais transformando o programa em formas intermedirias produzidas em meios de armazenamento externo (fitas perfuradas e cartes).
Introduo
4/52
Introduo
Compiladores, Filtros e Pr-processadores
O cdigo-objeto final, que tambm apresentava-se na forma de fitas e cartes, continha programas-objeto em linguagem de mquina relocvel, ou em formato fonte de linguagem simblica de baixo nvel. A partir da, e atravs de processamento adicional, chegava-se a um programa executvel (ainda na forma de fitas ou cartes).
Introduo
5/52
Introduo
Compiladores, Filtros e Pr-processadores
Atualmente os compiladores operam integrados aos demais componentes do sistema de programao, fazendo parte do conjunto dos recursos oferecidos pelo sistema operacional (Unix) inclusive entradas e sadas.
Introduo
6/52
Introduo
Definies bsicas
COMPILADOR: um dos mdulos do software de um computador, cuja funo a de efetuar automaticamente a traduo de textos, redigidos em uma determinada linguagem de programao, para alguma outra forma que viabilize sua execuo (em geral em linguagem de mquina).
Texto fonte Texto fonte (redigido em linguagem (redigido em linguagem fonte) fonte)
Tradutor Tradutor
Texto objeto Texto objeto (redigido em linguagem (redigido em linguagem objeto) objeto)
Introduo
TRADUTOR: Tradutores em que a linguagem fonte de baixo nvel, por tradio, chamam-se montadores (assembly languages)
7/52
Introduo
Definies bsicas
Generalizando: tradutores convertem textos redigidos em uma linguagem, para formas equivalentes, redigidas em outra linguagem. Se a primeira linguagem for de alto nvel, o tradutor ser chamado compilador.
Texto fonte Texto fonte (Linguagem de alto (Linguagem de alto nvel) nvel) Texto objeto Texto objeto (outra Linguagem )) (outra Linguagem
Compilador Compilador
Introduo
8/52
Introduo
Definies bsicas - Filtragem
Caso a linguagem objeto seja de alto nvel e muito semelhante a linguagem fonte, o tradutor recebe o nome de filtro.
Texto objeto Texto objeto (em C )) (em C
Filtro Filtro
Introduo
Exemplos?
9/52
Introduo
Definies bsicas O pr-processador
Programas que efetuem tradues entre 2 dialetos de mesma linguagem, ou que permitem converter para uma forma padronizada um texto que inclua extenses de uma Linguagem disponvel, chamam-se prprocessadores.
Texto fonte Texto fonte (no preparado) (no preparado)
Pr Pr processador processador
Introduo
10/52
Introduo
Atividades adicionais
1. Deteco e recuperao de erros Ex: variveis no inicializadas, wild pointers Ex: variveis (ou qualquer outra definio) no utilizada no cdigo. 2. Comentrios que facilitam a compreenso. As linhas de comentrio so reproduzidas no cdigoobjeto? 3. Comandos de controle de compilao.
Introduo
11/52
Introduo
Formalizao da linguagem
As linguagens de programao devem ser descritas de maneira completa e isenta de ambiguidades. Com notaes de linguagens formais, inspiradas em modelos estudados durante dcadas por estudiosos de linguagens naturais (matemticos ou cientistas da computao), mas mais restritas do que uma linguagem irrestrita (tipo 0) ,o que limita sua generalidade e aumenta sua simplicidade. tais elaboraes visaram a confeco de programas analisadores ou para reconhecimento de padres em outras reas do conhecimento.
Introduo
12/52
Introduo
Gramticas/Reconhecedores
O ideal seria conversarmos diretamente computador (nada muito vivel, atualmente). com
Introduo
S SS Usando o que vivel, as Linguagens de programao podem ser formalizadas de 2 maneiras: S deaSb 1. Atravs da gramtica: Conjunto de leis formao que definem rigorosamente o modo de formar textos S bSa corretos em uma linguagem. A linguagem, como vimos, o conjunto de todos os textos gerados a partir das S gramaticais. regras
Gramticas so portanto dispositivos geradores (sntese) de textos pertencentes a linguagem.
13/52
Introduo
Gramticas/Reconhecedores
Usando o que vivel, as Linguagens de programao podem ser formalizadas de 2 maneiras: 2. Reconhecedores: uma regra de teste que permite classificar um texto como apertencente a uma dada 2 1 1 linguagem ou no. Muitos compiladores so construdos com base em Reconhecedores Gramtica e Reconhecedores so formas de representao que a b b 6 0 3 5 4 1 permitem definir formalmente linguagens de programao. Elas prprias formam linguagens atravs a b das quais esta formalizao efetuada.
7
Introduo
8 1
14/52
Introduo
Metalinguagens
A linguagem utilizada para representar ou definir uma linguagem demodo generalista chama-se METALINGUAGEM. Em Linguagem Natural seria uma gramtica da lngua inglesa redigida em portugus para ser usada por pessoas de lngua portuguesa. Em linguagem de Programao o exemplo mais conhecido a Backus-Naur Form - BNF atravs da qual so construdas gramticas e diagramas de estados que representam os autmatos finitos atravs dos quais so construdos reconhecedores de vrias linguagens.
Introduo
15/52
Introduo
Metalinguagens
Exemplo de gramtica escrita em BNF
<program> ::= int main () <block> <block> ::= { <stmt-list> } <stmt-list> ::= <stmt> | <stmt><stmt-list> | <decl> | <decl><stmt-list> <decl> ::= int <id> ; | double <id> ; <stmt> ::= <asgn-stmt> | <cout-stmt> | <return-stmt> <asgn-stmt> ::= <id> = <expr> ; <expr> ::= <expr> + <expr> | <expr> * <expr> | ( <expr> ) | <id> <cout-stmt> ::= cout <out-list> ; <return-stmt> ::= return <integer> ; ... Derivao do exemplo (<program> o smbolo de incio): <program> int main () <block> int main () {<stmtlist> } int main () { <decl> <stmt-list> } int main () { int <id>; <stmt-list> } int main () { int a ; <stmtlist> } * etc.
Introduo
16/52
O Processo de Compilao
Fases da compilao
As fases esto associadas s trs partes da especificao de uma linguagem: sintaxe, restries contextuais (semntica esttica) e semntica.
Introduo
17/52
O Processo de Compilao
Programa fonte preprocessador Programa fonte compilador
Introduo
assembler Cdigo objeto (relocvel) Carregador/ link-editor Cdigo executvel Bibliotecas/ cdigos objeto
Programa em assembler
18/52
Relato de erros
AST
Anlise contextual
Relato de erros
AST Decorada
Introduo
Gerao de cdigo
Programa objeto
19/52
Tratamento de erros
20/52
Passos de compilao
Introduo
Um passo uma travessia do programa fonte, ou de uma representao interna dele. Um compilador de um passo atravessa o programa uma nica vez. Um compilador de mltiplos passos faz vrias travessias O projeto de um compilador diretamente relacionado ao nmero de passos
21/52
Passos de compilao
Compilao em mltiplos passos
Mdulo principal (driver) chama cada um dos passos, responsveis pela anlise sinttica, anlise contextual e gerao de cdigo.
Driver do Compilador
Introduo
Analisador Sinttico
Analisador Contextual
Gerador de Cdigo
22/52
Passos de compilao
Compilao em passo nico
Analisador sinttico vai realizando/chamando as atividades de anlise contextual e gerao de cdigo, medida que l e reconhece o programa
Introduo
23/52
Passos de compilao
Compilao em passo nico
Driver do Compilador
Analisador Sinttico
Introduo
Analisador Contextual
Gerador de Cdigo
24/52
Introduo
25/52
Anlise lxica l a seqencia de caracteres e a organiza como tokens seqencias de caracteres com algum significado Anlise sinttica agrupa caracteres ou tokens em uma estrutura hierrquica com algum significado
Introduo
26/52
A etapa de parsing
Tokens, Padres e Lexemas
Ex: id e num
Introduo
Padres (patterns) so regras que descrevem um conjunto de lexemas que pertencem a um token
Ex: uma letra seguida de letras e dgitos, uma sequncia de dgitos no nula
27/52
A etapa de parsing
Exemplo
let var Ident. colon let n : var n : Integer; let var var c: Char in begin c := &; n := n + 1 Ident. becomes Ident. op end n := n + Ident. Integer
Introduo
intlit 1
28/52
A etapa de parsing
Exemplo
y := 31 + 28*x Analisador lxico
<id, y> <assign, > <num, 31> <+, > <num, 28> <*, > <id, x> token
Introduo
Parser
29/52
Expresso numero 3
Introduo
30/52
Introduo
Velocidade possvel vantagem para um passo Espao possvel vantagem para um passo (dados x programa) Modularidade vantagem de mltiplos passos Flexibilidade vantagem de mltiplos passos Transformaes/otimizaes de programas vantagem de mltiplos passos Caractersticas da linguagem fonte podem inviabilizar o uso de um passo nico se a linguagem permite o uso de uma funo antes da sua definio, por exemplo.
31/52
Compilador
LBL1: WHILE: cmp x, 3 jne ENDWHILE sub x, 3 mov v, 10 jmp WHILE ENDWHILE: ...
Programa Assembly
32/52
Introduo
33/52
Lex
Programa
Introduo
Sada
34/52
35/52
36/52
produz
1234
test 78
Introduo
Sada
37/52
1234 var
test
9800 +
*/
temp
Introduo
Sada
38/52
Introduo
39/52
Estrutura do Compilador
Introduo
Programa
Lex
Parser (Yacc)
Cdigo mquina
40/52
Introduo
41/52
Expr
If_stmt While_stmt ...
Expr + Expr | Expr Expr | Expr * Expr | Expr / Expr | ( Expr ) | id | num
if ( Expr ) then Stmt |if ( Expr ) then Stmt else Stmt while ( Expr ) do Stmt
entrada 10 + 2 * 5
Introduo
Parsing
| | | | id
42/52
E 10
+ E 2
E * E 5
rvore de derivao
Introduo
43/52
Ex:
Introduo
S SS S aSb S bSa S
44/52
Introduo
45/52
Introduo
Derivao do exemplo (<program> o smbolo de incio): <program> int main () <block> int main () {<stmt-list> } int main () { <decl> <stmt-list> } int main () { int <id>; <stmtlist> } int main () { int a ; <stmt-list> } * etc.
46/52
S SS S aSb //// bSa S ///////// (comea com b) //// S /// (nenhum avano)
47/52
Introduo
S aSb aSSb S aSb aaSbb //// aSb a///////b S ////////////bSa// (a seg letra um b) //// aSb ab S ////////////// (tamanho 2)
48/52
w=aabb
S SS SSS SSSS //// SS ///S//// S/////S S ////////S///S ////SS//// //// SS SS/// SS///// S /////////////S///////SS/ (eu j desisti)
Introduo
49/52
Introduo
50/52
51/52
Introduo
52/52
Lista de Exerccios
Compiladores: Princpios e Prticas (Louden) Exerccios 1.1, 1.2, 1.3, 1.6
Introduo