1 Curso Sistemas de Informação Disciplina: Arquitetura de Software Compiladores e Interpretadores.

25
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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

ExercícioDesenhe a Árvore de Análise

para a instrução:

A := (B * C) + (A * C) + (B * C)