Você está na página 1de 36

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

II.1 Conceitos Fundamentais

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.
1 - INTRODUÇÃO Uma delas é programar o =>
1 - INTRODUÇÃO

II.1 Conceitos Fundamentais


O que é um programa?
É um conjunto de instruções organizadas
logicamente.
Como se estabelece uma comunicação?
Oi! Como vai Vou bem! E
você? você?

É necessário a utilização de uma Linguagem para que


haja entendimento entre os interlocutores.
1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.1 Conceitos Fundamentais

Hi! How are


O que?
you?

Poxa! Ninguém se entende! Por que?

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.1 Conceitos Fundamentais

Hi! How are E aí Meu!


you? Como vai?

Vou bem! E
você?

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.1 Conceitos Fundamentais

Fine!

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.1 Conceitos Fundamentais


Oi máquina 1101 0110 1111=D6F

Natural Linguagem de Máquina


Processa
E N T R A DA SA Í DA
mento

Tradução:
Compiladores
Linguagem de Interpretadores
programação:

Alto Nível Baixo Nível


1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.2 Gerações das Linguagens de Programaçã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.

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.3 Linguagem de Programaçã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.

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.3 Linguagem de Programaçã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
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

II.3 Linguagem de Programação


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

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.3 Linguagem de Programação


Proximidade entre a linguagem e a máquina.

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

II.3 Linguagem de Programação


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

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

II.4 Sistema Operacional


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.

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.4 Sistema Operacional


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.
1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.5 Tradutores
Fonte Tradução Objeto Linkedição Executável

Entrada Executável Saída

Compilador

Fonte Interpretação
Executável
Entrada Saída

Interpretador
1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.5 Tradutores

Fonte Tradutor Byte Code


Código
Intermediário

Máquina Saída
Entrada Virtual

Java

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.5 Tradutores
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).

1 - INTRODUÇÃO
1 - INTRODUÇÃO

II.5 Tradutores
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.

1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.5 Tradutores
II.5.1 – Estrutura de um Tradutor
Fluxo de Caracteres

Fluxo de tokens
Tabela de Símbolos

Árvore Sintática

Árvore Sintática

1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.5 Tradutores
II.5.1 – Estrutura de um Tradutor
Árvore Sintática

Representação
Intermediária

Tabela de Símbolos
Representação
Intermediária

Código da Máquina Alvo

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 ...
Palavra reservada;
token = [nome-token,valor-atributo] 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
II.5 Tradutores
II.5.1.2 – Análise Léxica
While i<100 do i: = j + i;

[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].

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

No exemplo do comando dado acima, ou seja


While i<100 do i: = j + i;
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>

<exp_bool> <comando>

<atrib>
<exp_arit> <exp_arit>

<termo> <termo> <exp_arit>


<variável>
<variável> <numero>
<exp_arit> <termo>

<termo> <variável>
<variável>

while i < 100 do i := j + i

1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.5 Tradutores
II.5.1.4 – Análise Semântica
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 Tradutores
II.5.1.5 – Geração de Código Intermediário
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 Tradutores
II.5.1.5 – Geração de Código Intermediário

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 Tradutores
II.5.1.6 – Otimização de Código
L0 if i < 100 goto L1
Exemplo: goto L2
While i<100 do i:=j+i; L1 TEMP := J+I
I:=TEMP
Anterior goto L0
L2 ........

L0 if i >= 100 goto L2


Otimizado i:=j+i
goto L0
L2 ........

1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.5 Tradutores
II.5.1.7 – Geração de Código Objeto
Exemplo: L0 if i >= 100 goto L2
i:=j+i
while i<100 do i:=j+i;
goto L0
Otimizado L2 ........

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


L0 MOV AX,i
CMP AX,100
JGE L2
MOV AX, j
Objeto MOV BX, i
ADD BX
MOV i, AX
JMP L0
L2 ........
1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.5 Tradutores
II.5.1.8 – Gerência de Tabelas

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

1 - INTRODUÇÃO