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

Post on 17-Apr-2015

107 views 0 download

Transcript of 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

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

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

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

5

Processo de Montagem e Tradução

CÓDIGO FONTE

TRADUÇÃO

LINGUAGEM DE MÁQUINA

6

Compiladores (Processo de Compilação)

Execução

Fonte

Compilação

LP

LM

Dados

Executável criado antes da execução

Interpretadores (Processo de Interpretação)

Execução

Fonte

Interpretação

LP

LM

Dados

Executável criado em tempo de execução

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

9

É mais ágil de INTERPRETAR.

Não é específico de uma PLATAFORMA.

Necessita ser instalado um INTERPRETADOR DE CÓDIGO.

Código Intermediário

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

11

É uma linguagem usada para descrever outra linguagem.

BNF é uma metalinguagem para descrever Linguagens de Programação.

Backus-Naur Form - BNF

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.

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

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>

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

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

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

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>

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

+ -

20

Exemplo de Programa Válido

begin

A := B + C;

B := B - D;

A := B;

end

Um programa apenas contém símbolos

terminais!

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>

Parse Trees<sentença>

<id>

A

<expressão>:=

<id>

B

+ <id>

C

A := B + CA := B + C

ExercícioDesenhe a Árvore de Análise

para a instrução:

A := B * ( A + C )

Exercício<atrib>

A <expr>

<expr>

)

*

<expr>

+

B

(

A C

:=

ExercícioDesenhe a Árvore de Análise

para a instrução:

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