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