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