II.1 Conceitos Fundamentais II.2 Gerações das Linguagens ... · Natural Linguagem de Máquina Oi...

36
1 - INTRODUÇÃO 1 - INTRODUÇÃO II.1 Conceitos Fundamentais II.2 Gerações das Linguagens de Programação II.3 Linguagem de Programação II.4 Sistema Operacional II.5 Tradutores II.5.1 Estrutura de um tradutor II.5.1.1 Análise Léxica II.5.1.3 Análise Sintática II.5.1.4 Análise Semântica II.5.1.5 Geração de Código Intermediário II.5.1.6 Otimização de Código II.5.1.7 Geração de Código Objeto

Transcript of II.1 Conceitos Fundamentais II.2 Gerações das Linguagens ... · Natural Linguagem de Máquina Oi...

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.1 Conceitos Fundamentais II.2 Gerações das Linguagens de Programação II.3 Linguagem de Programação II.4 Sistema Operacional II.5 Tradutores II.5.1 Estrutura de um tradutor

II.5.1.1 – Análise Léxica II.5.1.3 – Análise Sintática II.5.1.4 – Análise Semântica II.5.1.5 – Geração de Código Intermediário II.5.1.6 – Otimização de Código II.5.1.7 – Geração de Código Objeto

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Atualmente uma série de tarefas das nas mais diversas áreas são realizadas através de um computador ou algum sistema controlado por um computador.

Exemplifique algumas tarefas realizadas por este sujeito

Exemplifique algumas tarefas realizadas por este sujeito.

II.1 Conceitos Fundamentais

Uma delas é programar o =>

1 - INTRODUÇÃO

1 - INTRODUÇÃO

O que é um programa?

É um conjunto de instruções organizadas logicamente.

Como se estabelece uma comunicação?

Oi! Como vai você?

Vou bem! E você?

É necessário a utilização de uma Linguagem para que haja entendimento entre os interlocutores.

II.1 Conceitos Fundamentais

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Poxa! Ninguém se entende! Por que?

Hi! How are you?

O que?

II.1 Conceitos Fundamentais

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Hi! How are you?

E aí Meu! Como vai?

Vou bem! E você?

II.1 Conceitos Fundamentais

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Fine!

II.1 Conceitos Fundamentais

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Linguagem de Natural Máquina

Oi máquina 1101 0110 1111=D6F

Linguagem de programação: Alto Nível

Tradução: Compiladores Interpretadores

Baixo Nível

II.1 Conceitos Fundamentais

Processamento

S A Í D A E N T R A DA

1 - INTRODUÇÃO

1 - INTRODUÇÃO

1ª Geração Linguagem de máquina;

2ª Geração Assembler, linguagem montadora;

3ª Geração Linguagem de alto nível orientada para os procedimentos, linguagem simbólica de composição do raciocínio;

4ª Geração diversificação das linguagens de programação. Linguagens de altíssimo nível, orientadas para problemas.

II.2 Gerações das Linguagens de Programação

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Definição: é um conjunto de termos (vocábulos) e regras (sintaxe) que permitem a formulação de instruções (programas para serem executadas pelo computador)

Tipos de linguagens:

• Linguagem de Máquina: é única entendida pelo computador, sendo formada por instruções em código binário.

II.3 Linguagem de Programação

1 - INTRODUÇÃO

1 - INTRODUÇÃO

• Linguagem de baixo nível: são aquelas cujo os códigos são muito próximos aos usados pela máquina. São utilizadas no desenvolvimento de

II.3 Linguagem de Programação

aplicações que interagem diretamente com o hard-ware necessitando alta ve-locidade de execução. A estas linguagens dá-se o

nome de Linguagem Mon-tadora (Assembler – As-sembly Language).

1 - INTRODUÇÃO

1 - INTRODUÇÃO

• Linguagem de alto nível: são aquelas cujo os códigos são muito próximos aos utilizados pela linguagem humana.

II.3 Linguagem de Programação

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Proximidade entre a linguagem e a máquina.

II.3 Linguagem de Programação

Linguagem de Alto Nível If a=2 then a=b+c

Sistema Operacional

Assembly – Linguagem Montadora lda ah,0A

Linguagem de Máquina 000011111010101

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Relação entre o usuário e o computador através da linguagem.

II.3 Linguagem de Programação

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.4 Sistema Operacional

Definição: Conjunto de programas integrados, cuja tarefa é colocar a máquina em operação e proporcionar um ambiente para que o usuário possa se comunicar com ela.

Histórico dos S.O´s 1° Nível (anos 50): Auxiliar programas nas operações

de entrada e saída de dados e na tradução de programas-fontes.

2° Nível (anos 60): auxiliar na tradução de programas mais evoluídos, programas de serviço para transferência de informação entre periféricos.

3°Nível (anos 60): base para os tradutores de altíssimo rendimento.

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Estrutura básica de um sistema operacional. Os programas de um S.O. podem ser divididos em

grupos: Programas de controle: Coordenam o funcionamento

de todos os elementos físicos (hardware) do computador (CPU, processamento de I/O e periféricos).

Gerenciamento de dados: Controlar e coordenar todas

as operações relativas à movimentação de dados.

II.4 Sistema Operacional

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Gerenciamento de serviços/trabalhos: Controlar os programas de usuários para execução e re execução e atribuição a periféricos.

Gerenciamento de sistemas: Coordenar e supervisionar o funcionamento dos demais programas tais como: proteção de memória, identificação de erros na memória e de erros de programa (quando a U.C (Unidade de Controle) não reconhecer o comando).

Programas de processo: Usados para dar apoio e fornecer programas para execução: tradutores, utilitários.

II.4 Sistema Operacional

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5 Tradutores

Fonte Objeto Executável Tradução Linkedição

Executável Entrada Saída

Compilador

Fonte Executável

Interpretação

Entrada Saída

Interpretador

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5 Tradutores

Fonte Byte Code Código

Intermediário

Tradutor

Entrada Saída

Java

Máquina Virtual

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Finalizando: A tradução dos programas pode se feitas de três formas:

Montadores (Assembler): Transformam os programas escritos em linguagem de baixo nível (Assembly) em programas-objetos.

Compiladores: Transforma programas escritos em linguagem de alto nível (programa-fonte) em programas-objetos, que após transformado pelo Linker, poderá ser executado pelo computador (arquivo tipo EXE).

II.5 Tradutores

1 - INTRODUÇÃO

1 - INTRODUÇÃO

Interpretadores: Tem as mesmas características dos compiladores, só que não geram programas-objetos. A tradução é feita diretamente do programa fonte. É mais demorado que o compilador, uma vez que interpreta cada comando ao executá-lo.

II.5 Tradutores

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1 – Estrutura de um Tradutor II.5 Tradutores

Tabela de Símbolos

Fluxo de Caracteres

Fluxo de tokens

Árvore Sintática

Árvore Sintática

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1 – Estrutura de um Tradutor II.5 Tradutores

Tabela de Símbolos

Árvore Sintática

Código da Máquina Alvo

Representação Intermediária

Representação Intermediária

Código da Máquina Alvo

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5 Tradutores

II.5.1 – Estrutura de um Tradutor

Tabela de Símbolos: É responsável pelo armazenamento das informações de todo o programa fonte e é utilizada por todas as fases do compilador.

Exemplo: opere a = b + c

lexema discriminação

opere Reservada

a Variável

= Atribuição

b Variável

+ Aritmético

C variável

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5 Tradutores

II.5.1.1 – Análise Léxica

Ou Leitura (scaning) – Agrupa uma sequência significativa = Lexema. Para cada lexema é produzido um ...

token = [nome-token,valor-atributo] Palavra reservada; Delimitadores; Identificadores

Inicia a construção da tabela de símbolos e envia mensagem de erros.

Exemplo: While i<100 do i:=j+i;

[while,][id,7][<,][cte,13][do,][id,7][:=,][id,12][+,][id,7][;, ]

1 - INTRODUÇÃO

1 - INTRODUÇÃO

[while,][id,7][<,][cte,13][do,][id,7][:=,][id,12][+,][id,7][;, ]

• palavras reservadas, operadores e delimitadores são representados pelos próprios símbolos;

• Identificadores de variáveis e constantes numéricas são representados pelo par

[classe do símbolo, índice de tabela].

II.5 Tradutores

II.5.1.2 – Análise Léxica

While i<100 do i: = j + i;

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5 Tradutores

II.5.1.3 – Análise Sintática

Verifica se a estrutura gramatical (frase) (expressões, comandos) estão de acordo com as regras da linguagem.

• Processo de varredura (parsing)

• Produz a árvore de derivação resultante da aplicação das regras gramaticais.

• Detecção de erros: Identifica a posição e o tipo de erro.

• Muitas vezes opera conjuntamente com o analisador semântico.

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.3 – Análise Sintática

While i<100 do i: = j + i; No exemplo do comando dado acima, ou seja

Deve-se montar a árvore de derivação seguindo-se as seguintes regras gramaticais (Normal de Bakus). <não terminais>, terminais

<comando> <while> | <atrib> |....

<while> while <exp_bool> do <comando>

<atrib> <variável> := <exp_arit>

<exp_bool> <exp_arit> < <exp_arit>

<exp_arit> <exp_arit> + <termo> | <termo>

<termo> <numero> | <variável>

<variável> i |j

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.3 – Análise Sintática <comando> <while> | <atrib> |....;<while> while <exp_bool> do <comando>; <atrib> <variável> := <exp_arit>;

<exp_bool> <exp_arit> < <exp_arit>; <exp_arit> <exp_arit> + <termo> | <termo>; <termo> <numero> | <variável>; <variável> I |J

<comando>

<while>

do

<exp_bool>

while

<comando>

<exp_arit>

<

<exp_arit>

<termo>

<variável>

i

<termo>

<numero>

100

<atrib>

<variável>

:=

<exp_arit>

i

<exp_arit>

+

<termo>

<termo>

<variável>

<variável>

j i

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.4 – Análise Semântica II.5 Tradutores

Verifica se as estruturas do programa irão fazer sentido durante a execução.

• Verifica se um identificador declarado como variável é usado como tal

• Existência de compatibilidade entre operandos e expressões.

Exemplo: Em pascal o comando while tem a seguinte sintaxe:

while <expressão> do <comando>

Deve retornar um valor lógico

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.5 – Geração de Código Intermediário II.5 Tradutores

Utiliza a representação interna produzida pelo analisador sintático e gera como saída uma sequência de código. Esta sequência pode ser o código final ou um código intermediário.

A geração do código intermediário possui algumas vantagens:

• Otimização do código intermediário, obtendo-se um código final mais eficiente;

• Resolve, gradualmente, as dificuldades da passagem do código fonte para o objeto.

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.5 – Geração de Código Intermediário II.5 Tradutores

Exemplo:

While i<100 do i:=j+i;

L0 if i < 100 goto L1

goto L2

L1 TEMP := i+j

i:=TEMP

goto L0

L2 ........

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.6 – Otimização de Código II.5 Tradutores

Exemplo:

While i<100 do i:=j+i;

Anterior

Otimizado

L0 if i < 100 goto L1

goto L2

L1 TEMP := J+I

I:=TEMP

goto L0

L2 ........

L0 if i >= 100 goto L2

i:=j+i

goto L0

L2 ........

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.7 – Geração de Código Objeto II.5 Tradutores

Exemplo:

while i<100 do i:=j+i;

Otimizado

Objeto

Código baseado na linguagem simbólica de um PC 8086

L0 if i >= 100 goto L2

i:=j+i

goto L0

L2 ........

L0 MOV AX,i

CMP AX,100

JGE L2

MOV AX, j

MOV BX, i

ADD BX

MOV i, AX

JMP L0

L2 ........

1 - INTRODUÇÃO

1 - INTRODUÇÃO

II.5.1.8 – Gerência de Tabelas II.5 Tradutores

Algumas tabelas são fixas como de palavras reservadas, delimitadores, etc..

É de grande importância a tabela montada durante a análise do programa fonte:

• Declaração de variáveis; • Declaração dos procedimentos ou sub-rotinas; • Parâmetros de sub-rotinas; etc.

Dados coletados e armazenados na tabela dependem da linguagem.

1 - INTRODUÇÃO

1 - INTRODUÇÃO

C o n c l u s õ e s.

Perguntas?

1 - INTRODUÇÃO

1 - INTRODUÇÃO