Post on 14-Dec-2018
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
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.