Linguagens de Programação Aula 3

Documentos relacionados
Conceitos de Linguagens de Programação

Revisão: linguagens de programação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Compiladores. Introdução

Noções de compilação

Noções de compilação

Introdução à Programação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Linguagens de Programação Aula 4

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

As fases de um compilador

Compiladores. Análise Léxica

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Paradigmas de Linguagem de Programação. Aspectos Básicos

As fases de um compilador

Autômatos e Linguagens

Conceitos de Linguagens de Programação

Compiladores. Conceitos Básicos

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Projeto de Compiladores

Paradigmas de Programação

Linguagem de Programação e Compiladores

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Programação de Computadores

Compiladores. Introdução à Compiladores

Compiladores. Fabio Mascarenhas

Programação de Computadores

Capítulo 6: Linguagens de Programação

II.1 Conceitos Fundamentais. Uma delas é programar o =>

FACULDADE LEÃO SAMPAIO

Projeto de Compiladores

Programação de Computadores:

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Programação de Computadores

Aspectos preliminares

Compiladores Aula 1. Celso Olivete Júnior.

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

Compiladores. Análise Semântica

Introdução a Ciência da Computação

Introdução parte II. Compiladores. Mariella Berger

ao paradigma imperativo

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Compiladores. Prof. Bruno Moreno

Compiladores Aula 3. Celso Olivete Júnior.

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Aula teórica 7. Preparado por eng.tatiana Kovalenko

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Compiladores I Prof. Ricardo Santos (cap 1)

Linguagens de Programação

UMA PROPOSTA DE FERRAMENTA PARA SIMPLIFICAR A DEPURAÇÃO DE CÓDIGOS EM C, POR ALUNOS INICIANTES

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Hierarquia de Chomsky e sua relação com os autômatos

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Compiladores. Análise Semântica

Fundamentos de Programação 1

Compiladores 02 Analise léxica

PROGRAMAÇÃO I. Introdução

Aspectos preliminares

Prof. Adriano Maranhão COMPILADORES

Linguagens de Programação

COMPILAÇÃO. Ricardo José Cabeça de Souza

Programação Estruturada e OO Aula 1.2 Introdução a Paradigmas de Programação. Prof. Bruno Moreno

Introdução aos Compiladores

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Especificações Gerais do Compilador e Definição de FRANKIE

Linguagens de Programação

CP Compiladores I Prof. Msc.. Carlos de Salles

Aspectos preliminares

INF 1005 Programação I

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Linguagens de Programação Classificação

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Linguagens de Programação

Análise Semântica e Representação Intermédia

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Como construir um compilador utilizando ferramentas Java

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Introdução à Computação

CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO

Introdução à Computação

15/03/2018. Professor Ariel da Silva Dias Paradigma Imperativo

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

PROGRAMAÇÃO ORIENTADA A OBJETOS I -CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc.

Aula 2 - Introdução Cleverton Hentz

CAP. VI ANÁLISE SEMÂNTICA

Transcrição:

Aula 3 Celso Olivete Júnior olivete@fct.unesp.br

Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33

Na aula de hoje... O processo de compilação O que é, para que serve e estrutura geral Formas de descrever uma LP 3/33

Roteiro Visão geral Compilação análise 1. Léxica 2. Sintática 3. Semântica Compilação síntese 1. Geração de código intermediário 2. Otimização de código 3. Geração do código objeto (linguagem máquina) Formas de descrever uma LP 4/33

Processo de compilação Um Compilador C é um programa que tem a finalidade de traduzir ou converter um programa P f (fonte) escrito numa linguagem L f linguagem fonte - para um programa P o (objeto) escrito numa outra linguagem L o - linguagem objeto; P o é o resultado da tradução. L m, a linguagem na qual o compilador é escrito, é em geral, a linguagem de máquina do computador onde ele é processado. Na maioria das vezes, C não é programado em L m, sendo convertido para ela por meio de uma compilação. Entrada P f /L f Computador C/L m Saída P o /L o L o = L m Prog. Fonte Compilador Prog. Objeto 5/33

Processo de compilação Em geral, L f é uma linguagem de alto nível como ALGOL, COBOL, PASCAL, etc. L o não é necessariamente uma linguagem de máquina. Por exemplo, L o pode ser uma Linguagem de Montagem ("Assembler") L a. Nesse caso, é necessário ter-se mais uma fase de tradução de L a para a linguagem de máquina L m do computador a ser utilizado para processar o programa objeto. P f /L f C/L m P o /L a C/L m P o /L m Prog. Fonte Compilador Prog. Objeto Compilador Montador Prog. Objeto 6/33

Compilador: Arquitetura básica Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 7/33

Compilador: um exemplo Fases da transformação 8/33

Compilador: um exemplo Fases da transformação: o compilador vê o código fonte como uma sequência de caracteres 9/33

Compilador: Arquitetura básica Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 10/33

Compilador: um exemplo A análise léxica fornece tokens: uma cadeia de tokens sem espaços e comentários 11/33

Compilador: Arquitetura básica Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 12/33

Compilador: um exemplo A análise sintática fornece uma árvore abstrata construída a partir das regras da gramática 13/33

Compilador: Arquitetura básica Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 14/33

Compilador: um exemplo A análise semântica resolve símbolos, com tipos checados 15/33

Compilador: Arquitetura básica Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 16/33

Compilador: um exemplo Tradução para linguagem intermediária. Código de 3 endereços 17/33

Compilador: um exemplo Geração de código linguagem de montagem Assembly 80386 18/33

Compilador Um compilador é um programa que transforma um outro programa escrito em uma linguagem de programação de alto nível qualquer em instruções que o computador é capaz de entender e executar. Foco na linguagem fonte 19/33

Linguagens de programação Uma LP é uma linguagem destinada para ser usada por uma pessoa para expressar um processo através do qual um computador pode resolver um problema Dependendo da perspectiva, têm-se Pessoa = paradigma lógico/declarativo Processo = paradigma funcional Computador = paradigma imperativo Problema = paradigma orientado a objetos 20/33

Linguagens de programação Estilo/forma de programação Imperativa especifica-se como uma computação deve ser feita para resolver problemas, passo a passo, via execução de instruções. Ex: C, Pascal, Java,... Declarativa especifica-se qual computação deve ser feita para resolver problemas. Ex: Haskell, Prolog, Ml,... 21/33

Roteiro Visão geral Compilação análise 1. Léxica 2. Sintática 3. Semântica Compilação síntese 1. Geração de código intermediário 2. Otimização de código 3. Geração do código objeto (linguagem máquina) Formas de descrever uma LP 22/33

LP: sintaxe e semântica A descrição de uma LP envolve dois aspectos principais: Sintaxe: conjunto de regras que determinam quais construções são corretas Semântica: descrição de como as construções da linguagem devem ser interpretadas e executadas Em Pascal: a:=b Sintaxe: comando de atribuição correto Semântica: substituir o valor de a pelo valor de b 23/33

LP: sintaxe e semântica exemplo Analise o código em linguagem C abaixo e verifique se existem erros. 1. int j=0, conta, V[10]; float i@; 2. conta = 0 3. for (j=0, j<10; j++ 4. { 5. V[j] = conta++; 6. } O compilador tem a responsabilidade de reportar ERROS! É necessário algum recurso para identificá-los OquediferenciaostiposdeERROS? 24/33

LP: sintaxe e semântica exemplo Esses erros são verificados e diferenciados durante a fase de análise da compilação léxica: palavras (tokens) do programa i, j, for, =, (, <, int, ++, conta, V[] Erro: i@ sintática: combinação de tokens que formam o programa comando_for for (expr1; expr2; expr3) {comandos} Erros: ; for(j=0,... ) semântica: adequação do uso Tipos semelhantes em comandos (atribuição, por exemplo), uso de identificadores declarados Erro: conta = 0 25/33

Estruturas da compilação Como diferenciar as palavras e símbolos reservados (for, int, float, =) de identificadores definidos pelo usuário? Tabela de palavras e símbolos reservados for int float... 26/33

Estruturas da compilação Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código Otimização Local 27/33

Estruturas da compilação Como saber durante a compilação de um programa o tipo e o valor dos identificadores, escopo das variáveis, número e tipo dos parâmetros de um procedimento, etc.? identificador Classe Tipo Valor... j var int 0 fat function - -............ 28/33

Compilação passo-a-passo Análise léxica: atua no reconhecimento e classificação dos tokens (palavras) Expressões regulares e autômatos finitos x:=x+y*2 <x,id1> <:=,:=> <x,id1> <+,op> <y,id2> <*,op> <2,num> 29/33

Compilação passo-a-passo Análise léxica: pode ser feita através de autômatos finitos (AF) ou expressões regulares AF é uma máquina de estados finitos. Formada por um conjunto de estados (um estado inicial e um ou mais estados finais) Simulador Jflap Estado inicial indicado porumaseta inicial final Estado final representado por um circulo com2bordas 30/33

Análise léxica Autômatos finitos AF: exemplos... 1. Cadeia de caracteres a,b,c 2. Números inteiros (com ou sem sinal) 3. Números reais (com ou sem sinais) 4. Identificador 5. Comparação (>, >=, <, <=,!=) entre dois identificadores 6. Atribuição (=) entre dois identificadores 7. Comando IF if(condicao){ comandos;} else { comandos;} 8. Comando While 31/33

Compilação passo-a-passo Análise léxica: pode ser feita através de autômatos finitos (AF) ou expressões regulares Simulador Jflap Exemplos: AF para números inteiros, reais, identificadores, atribuição entre duas variáveis La..z D0..9 _underline =atribuição 32/33

Atenção... Para próxima aula leiam os itens 3.1 a 3.4 do livro do SEBESTA 33/33