II.1 Conceitos Fundamentais II.2 Gerações das Linguagens de

Propaganda
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
você?
Vou bem! E
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
you?
O que?
Poxa! Ninguém se entende! Por que?
1 - INTRODUÇÃO
1 - INTRODUÇÃO
II.1 Conceitos Fundamentais
Hi! How are
you?
E aí Meu!
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
Natural
1101 0110 1111=D6F
Linguagem de
Máquina
E N T R A DA
Linguagem de
programação:
Alto Nível
1 - INTRODUÇÃO
Processa
mento
Tradução:
Compiladores
Interpretadores
Baixo Nível
SA Í DA
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 hardware necessitando alta velocidade de execução.
A estas linguagens dá-se o
nome de Linguagem Montadora (Assembler – Assembly 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
Entrada
Objeto
Linkedição
Executável
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
Entrada
Java
1 - INTRODUÇÃO
Máquina
Virtual
Saída
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 programasobjetos. 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
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.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
II.5 Tradutores
1 - INTRODUÇÃO
II.5.1 – Estrutura de um Tradutor
II.5 Tradutores
1 - INTRODUÇÃO
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
1 - INTRODUÇÃO
lexema
discriminação
opere
Reservada
a
Variável
=
Atribuição
b
Variável
+
Aritmético
C
variável
II.5.1.1 – Análise Léxica
II.5 Tradutores
1 - INTRODUÇÃO
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
II.5.1.2 – Análise Léxica
II.5 Tradutores
1 - INTRODUÇÃO
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
II.5 Tradutores
1 - INTRODUÇÃO
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
II.5.1.3 – Análise Sintática
1 - INTRODUÇÃO
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>
<comando>
<exp_bool>
<exp_arit>
<exp_arit>
<termo>
<termo>
<variável>
<numero>
<atrib>
<exp_arit>
<variável>
<exp_arit>
<termo>
<termo>
<variável>
<variável>
while
1 - INTRODUÇÃO
i
<
100
do
i
:=
j
+
i
II.5 Tradutores
1 - INTRODUÇÃO
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
II.5 Tradutores
1 - INTRODUÇÃO
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, obtendose um código final mais eficiente;
• Resolve, gradualmente, as dificuldades da
passagem do código fonte para o objeto.
1 - INTRODUÇÃO
II.5.1.5 – Geração de Código Intermediário
Exemplo:
While i<100 do i:=j+i;
L0
L1
L2
1 - INTRODUÇÃO
if i < 100 goto L1
goto L2
TEMP := i+j
i:=TEMP
goto L0
........
II.5 Tradutores
1 - INTRODUÇÃO
II.5 Tradutores
1 - INTRODUÇÃO
II.5.1.6 – Otimização de Código
Exemplo:
L0
While i<100 do i:=j+i;
L1
if i < 100 goto L1
goto L2
TEMP := J+I
I:=TEMP
Anterior
goto L0
L2
L0
Otimizado
L2
1 - INTRODUÇÃO
if i >= 100 goto L2
i:=j+i
goto L0
........
........
II.5 Tradutores
1 - INTRODUÇÃO
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;
Otimizado
goto L0
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
Download