Año 20041 Introducción al Diseño de Compiladores ASIGNATURA: COMPILADORES.
1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.
Transcript of 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.
![Page 1: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/1.jpg)
1
Curso Sistemas de InformaçãoDisciplina: Arquitetura de Software
Compiladores e Interpretadores
![Page 2: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/2.jpg)
2
Uma Linguagem de Programação é composta de símbolos e códigos, regras de sintaxe e ferramenta.
A primeira e mais primitiva linguagem de computador é a própria linguagem de máquina (formada por 0’s e 1’s).
Linguagem de Programação
![Page 3: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/3.jpg)
3
Desenvolver um programa em linguagem de máquina é difícil, longo e principalmente caro de se construir.
Um programa em linguagem de máquina é difícil de ser entendido por outros programadores.
Essa complexidade levou a necessidade de desenvolver novas técnicas e ferramentas.
Programação em Linguagem de Máquina
![Page 4: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/4.jpg)
4
O processo de tradução da linguagem de montagem para a linguagem de máquina é realizada por um programa chamado ASSEMBLER.
Os programas de alto nível também precisam ser traduzidos para a linguagem de máquina.
O processo de montagem traduz um programa escrito numa Linguagem de Programação num programa equivalente em Linguagem de Máquina.
Linguagem Assembly e o Processo de Tradução
![Page 5: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/5.jpg)
5
Processo de Montagem e Tradução
CÓDIGO FONTE
TRADUÇÃO
LINGUAGEM DE MÁQUINA
![Page 6: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/6.jpg)
6
Compiladores (Processo de Compilação)
Execução
Fonte
Compilação
LP
LM
Dados
Executável criado antes da execução
![Page 7: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/7.jpg)
Interpretadores (Processo de Interpretação)
Execução
Fonte
Interpretação
LP
LM
Dados
Executável criado em tempo de execução
![Page 8: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/8.jpg)
Compiladores Híbridos
Execução
Fonte
Interpretação
LP
LM
Dados
Compilação
Código Intermediário
Código intermediário criado antes da execução
Executável criado em tempo de execução
![Page 9: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/9.jpg)
9
É mais ágil de INTERPRETAR.
Não é específico de uma PLATAFORMA.
Necessita ser instalado um INTERPRETADOR DE CÓDIGO.
Código Intermediário
![Page 10: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/10.jpg)
10
Exemplo.: JVM – Java Virtual Machine (Máquina Virtual Java).NET – Dot Net (Máquina Virtual Microsoft)
O código intermediário é chamado de bytecode.
Código Intermediário
![Page 11: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/11.jpg)
11
É uma linguagem usada para descrever outra linguagem.
BNF é uma metalinguagem para descrever Linguagens de Programação.
Backus-Naur Form - BNF
![Page 12: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/12.jpg)
12
Backus-Naur Form - BNF
John Backus Noam Chomsky
Peter Naur
Foram os idealizadores iniciais da linguagem de livre contexto.
Mais tarde Peter Naur modificou a linguagem para o projeto do Algol 60.
![Page 13: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/13.jpg)
13
Uma gramática em BNF é composta por um conjunto finito de regras para definir uma Linguagem de Programação.
Portanto, a gramática consiste em um conjunto de definições “REGRAS”.
É com a aplicação da gramática que conseguimos formar programas válidos na linguagem destino.
Gramática BNF
![Page 14: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/14.jpg)
14
Exemplo de Gramática BNF
<programa> ::= begin <list_inst> end
<list_inst> ::= <instrução> ;
| <instrução> ; <list_inst>
<instrução> ::= <var> := <expressão>
<var> ::= A | B | C
<expressão> ::= <var> + <var>
| <var> - <var>
| <var>
![Page 15: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/15.jpg)
15
A BNF usa abstrações para representar estruturas sintáticas. Ex.: <expressão>
Os itens léxicos são representados pelo negrito e são chamados de TERMINAIS.Ex.: A | B | C | D
O símbolo ::= é usado no sentido de: “é definido por”<id> ::= A | B | C | D
Gramática BNF
![Page 16: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/16.jpg)
16
Sempre existe um símbolo não-terminal no lado esquerdo de uma instrução.|<var> ::= A | B | C | D
No lado direito podemos ter terminais e/ou não-terminais.<var> ::= A | B | C | D <instrução> ::= <var> = <expressão>
Regras da BNF
![Page 17: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/17.jpg)
17
Sempre existe um símbolo não-terminal no lado esquerdo de uma instrução.|<var> ::= A | B | C | D
No lado direito podemos ter terminais e/ou não-terminais.<var> ::= A | B | C | D <instrução> ::= <var> = <expressão>
Regras da BNF
![Page 18: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/18.jpg)
18
Quais são os Não-Terminais e os Terminais ?
<programa> ::=
begin <lista_sentenças> end
<lista_sentenças> ::= <sentença> ;
| <sentença> ; <lista_sentenças>
<sentença> ::= <id> := <expressão>
<id> ::= A | B | C | D | E
<expressão> ::= <id> + <id>
| <id> - <id> | <id>
![Page 19: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/19.jpg)
19
Quais são os Não-Terminais e os Terminais ?
Não-Terminais
programa
lista_sentenças
sentença
id
expressão
Terminais
begin
end
; :=
A B C D E
+ -
![Page 20: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/20.jpg)
20
Exemplo de Programa Válido
begin
A := B + C;
B := B - D;
A := B;
end
Um programa apenas contém símbolos
terminais!
![Page 21: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/21.jpg)
21
Exemplo de uma Linguagem com SE condicional?
<programa> ::=
begin <lista_sentenças> end
<lista_sentenças> ::= <sentença> ;
| <sentença> ; <lista_sentenças>
| <condição> ; <lista_sentenças>
<sentença> ::= <id> := <expressão>
<condição> ::= if <comparação> then <lista_sentenças> end if
| if <comparação> then <lista_sentenças> else <lista_sentenças> end if
<comparação> ::= <id> > <id> | <id> < <id> | <id> = <id>
| <id> <> <id> | <id> <= <id> | <id> >= <id>
<id> ::= A | B | C | D | E
<expressão> ::= <id> + <id> | <id> - <id> | <id>
![Page 22: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/22.jpg)
Parse Trees<sentença>
<id>
A
<expressão>:=
<id>
B
+ <id>
C
A := B + CA := B + C
![Page 23: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/23.jpg)
ExercícioDesenhe a Árvore de Análise
para a instrução:
A := B * ( A + C )
![Page 24: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/24.jpg)
Exercício<atrib>
A <expr>
<expr>
)
*
<expr>
+
B
(
A C
:=
![Page 25: 1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.](https://reader036.fdocument.pub/reader036/viewer/2022062418/552fc10c497959413d8c3ddc/html5/thumbnails/25.jpg)
ExercícioDesenhe a Árvore de Análise
para a instrução:
A := (B * C) + (A * C) + (B * C)