Introdução à Programação

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

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Conceitos de Linguagens de Programação

Compiladores. Introdução

Introdução aos Compiladores

Compiladores I Prof. Ricardo Santos (cap 1)

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

INE5421 LINGUAGENS FORMAIS E COMPILADORES

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

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

Compiladores. Fabio Mascarenhas

Projeto de Compiladores

Linguagens de Programação Aula 3

Prof. Adriano Maranhão COMPILADORES

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

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

Projeto de Compiladores

Compiladores. Conceitos Básicos

Autômatos e Linguagens

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

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Conteúdo. Introdução a compiladores Tradução x Interpretação Processo de Compilação

Conceitos de Linguagens de Programação

Python e sua sintaxe LNCC UFRJ

Como construir um compilador utilizando ferramentas Java

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang

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

INE5622 INTRODUÇÃO A COMPILADORES

Compiladores 02 Analise léxica

Conceitos de Linguagens de Programação

Compiladores. Análise Léxica

Compiladores. Análise Léxica

Linguagens de Programação

Analisador Léxico parte II

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

Compiladores Aula 1. Celso Olivete Júnior.

Introdução. Tradutores de Linguagens de Programação

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

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

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

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Conceitos de Linguagens de Programação

Compiladores. Introdução à Compiladores

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Linguagens de Programação Classificação

Paradigmas de Programação

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Análise Sintática. Fabiano Baldo

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Noções de compilação

CAP. VI ANÁLISE SEMÂNTICA

CAP. VII GERAÇÃO DE CÓDIGO

Compiladores. Prof. Bruno Moreno

Linguagens Livres do Contexto. Adaptado de H. Brandão

Paradigmas de Programação

EA876 - Introdução a Software de Sistema

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

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

Tratamento dos Erros de Sintaxe. Adriano Maranhão

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

COMPILADORES. Análise semântica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

As fases de um compilador

Compiladores. Análise Semântica

Interfaces de Vanguarda do Compilador

Programação I Apresentação

As fases de um compilador

Desenvolvimento de Aplicações Desktop

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

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

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

Compiladores Ambiente de Execução

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Linguagens e Compiladores

Análise Sintática Introdução

Análise Léxica I. Eduardo Ferreira dos Santos. Março, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 31

Transcrição:

Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira de Souza Web: www.univasf.edu.br/~criston.souza/algoritmos.html email: criston.souza@univasf.edu.br UNIVASF Engenharia da Computação Introdução à Programação @2009

Sumário Sintaxe Semântica Linguagens interpretadas Linguagens compiladas Máquina virtual UNIVASF Engenharia da Computação Introdução à Programação @2009 2

Sintaxe A sintaxe de uma LP é a forma de suas expressões, de suas instruções e de suas unidades de programa. Ex.: sintaxe comando if (se) da linguagem C. if <expr> <cmd> se o valor atual da expressão for verdadeiro, a instrução incorporada será selecionada para execução. UNIVASF Engenharia da Computação Introdução à Programação @2009 3

Sintaxe As regras sintáticas especificam quais sequências de caracteres do alfabeto da linguagem estão nela. As descrições formais da sintaxe das LPs são chamadas de lexemas. Os lexemas de uma LP incluem seus identificadores, palavras reservadas, literais e operadores. UNIVASF Engenharia da Computação Introdução à Programação @2009 4

Sintaxe Um token (simbolo) de uma LP é uma categoria de seus lexemas. Exemplo instrução em linguagem C: index = 2 * cont + 17; Os lexemas e os símbolos dessa instrução são: index = 2 * cont + 17 ; Lexemas Símbolos Identificador sinal igual literal operador de multiplicação identificador operador de adição Literal ponto e vírgula UNIVASF Engenharia da Computação Introdução à Programação @2009 5

Sintaxe Métodos formais para descrever a sintaxe O lingüista Noam Chomsky, na década de 50, descreveu quatro classes de gramáticas que definem quatro classes de linguagens. Destas, as gramáticas livres de contexto e regulares, passaram a ser úteis para descrever a sintaxe de LPs. BNF Backus Naur Form Forma de Backus Naur, é uma notação muito utilizada para descrever a sintaxe de LPs. UNIVASF Engenharia da Computação Introdução à Programação @2009 6

Sintaxe Métodos formais para descrever a sintaxe A BNF usa abstrações para estruturas sintáticas. Exemplo: <atribuição> > <var> = <expressão> O símbolo a esquerda da seta, chamado de lado esquerdo LE, é a abstração que está sendo definida. O texto a direita da seta é a definição do LE, chamado de lado direito LD. A definição é chamada de regra ou produção. Exemplo: soma = valor1 + valor2 UNIVASF Engenharia da Computação Introdução à Programação @2009 7

Sintaxe Métodos formais para descrever a sintaxe As abstrações em uma descrição BNF são chamadas símbolos não terminais. Os lexemas e o símbolos das regras são chamados símbolos terminais. Exemplo: <instr_if> > if <expr_logica> <instrução> if <expr_logica> <instrução> else <instrução> A BNF é suficientemente poderosa para descrever a grande maioria das sintaxes das linguagens de programação. UNIVASF Engenharia da Computação Introdução à Programação @2009 8

Sintaxe Métodos formais para descrever a sintaxe A BNF é um dispositivo generativo para definir linguagens. As sentenças da linguagem são geradas por uma sequência de aplicações das regras, iniciando se com um símbolo não terminal, chamado símbolo de início. Uma geração da sentença é chamada derivação. UNIVASF Engenharia da Computação Introdução à Programação @2009 9

Sintaxe Métodos formais para descrever a sintaxe Exemplo 1: <programa> > inicio <lista_de_comandos> fim <lista_de_comandos> > <instrução> <instrução>; <lista_de_comandos> <instrução> > <var> = <expressão> <var> > A B C <expressão> > <var> + <var> <var> <var> <var> UNIVASF Engenharia da Computação Introdução à Programação @2009 10

Sintaxe Métodos formais para descrever a sintaxe Exemplo 2: <atribuição> > <id> + <expressão> <id> > A B C <expressão> > <id> + <expressão> <id> * <expressão> (<expressão>) <id> UNIVASF Engenharia da Computação Introdução à Programação @2009 11

Sintaxe Métodos formais para descrever a sintaxe Exemplo 2: A = B * (A + C) <atribuição> = > <id> = <expressão> = > A = <expressão> = > A = <id> * <expressão> = > A = B * <expressão> = > A = B * (<expressão>) = > A = B * (<id> + <expressão>) = > A = B * (<A> + <expressão>) = > A = B * (<A> + <id>) = > A = B * (A + C) UNIVASF Engenharia da Computação Introdução à Programação @2009 12

Sintaxe Métodos formais para descrever a sintaxe As gramáticas descrevem naturalmente a estrutura sintática hierárquica das linguagens que definem. As estruturas definidas pelas gramáticas são chamadas de árvores de análise. Todo vértice interno de uma árvore de análise é rotulada com um símbolo não terminal; toda folha é rotulada com um símbolo terminal. Toda subárvore de uma árvore de análise descreve uma instância de uma abstração na instrução. UNIVASF Engenharia da Computação Introdução à Programação @2009 13

Sintaxe Métodos formais para descrever a sintaxe Exemplo 2: A = B * (A + C) <atribuição> <id> = <expressão> A <id> * <expressão> B ( <expressão> ) <id> + <expressão> A <id> UNIVASF Engenharia da Computação Introdução à Programação @2009 14 C

Semântica A semântica trata da análise do significado das expressões, das instruções e das unidades de programa. A semântica é importante para que os programadores saibam precisamente o que as instruções de uma linguagem fazem. UNIVASF Engenharia da Computação Introdução à Programação @2009 15

Semântica Semântica operacional Descreve o significado de um programa ao executar suas instruções em uma máquina, real ou simulada. As alterações que ocorrem no estado de uma máquina, quando determinada instrução é executada, define o significado desta. O estado de um computador é definido pelos valores de todos os seus registradores e de suas localizações de memória. UNIVASF Engenharia da Computação Introdução à Programação @2009 16

Semântica Semântica operacional Para avaliar a semântica operacional de um programa é necessário o uso de um simulador (computador hipotético) e então traduzir a linguagem de alto nível, descrita pela LP, em linguagem de alto nível, que será interpretada pelo simulador. UNIVASF Engenharia da Computação Introdução à Programação @2009 17

Semântica Semântica operacional Exemplo: Intrução em linguagem C: for (expr1; expr2; expr3) { }... Semântica operacional: expr1; loop: if expr2 = 0 goto out... expr3; goto loop out:... UNIVASF Engenharia da Computação Introdução à Programação @2009 18

Semântica Semântica axiomática Método para provar a exatidão dos programas que mostra a computação descrita por sua especificação. Cada instrução de um programa tanto é precedida como seguida de uma expressão lógica que especifica restrições a variáveis. As expressões lógicas são usadas para especificar o significado das instruções. As restrições são descritas pela notação do cálculo de predicados. UNIVASF Engenharia da Computação Introdução à Programação @2009 19

Semântica Semântica denotacional Baseia se na teoria da função recursiva. Para cada entidade da linguagem deve ser definido tanto um objeto matemático como uma função que relacione instâncias daquela entidade com as deste. Os objetos representam o significado exato de suas entidades correspondentes. A dificuldade no uso deste método está em criar os objetos e as funções de correspondências. Os objetos matemáticos denotam o significado de suas entidades sintáticas correspondentes. UNIVASF Engenharia da Computação Introdução à Programação @2009 20

Linguagens Compiladas Programas escritos em linguagens de alto nível devem ser traduzidos para linguagens de máquina. Um compilador implementa uma linguagem fonte traduzindo programas escritos nessa linguagem para a linguagem objeto da máquina alvo onde os programas vão ser executados. UNIVASF Engenharia da Computação Introdução à Programação @2009 21

Linguagens Compiladas Compilador: visão geral Programa fonte int main() { if (a > b) { a = 1; b = 2; } } Compilador Linguagem de máquina (programa alvo) 0001110101 0111010101 0111101011 1111010101 1101111101 0101010111 1111100101 Mensagens de erro UNIVASF Engenharia da Computação Introdução à Programação @2009 22

Linguagens Compiladas Compilador: visão geral int main() { if (a > b) { a = 1; b = 2; } } Programa fonte Linguagem de programação 0001110101 0111010101 0111101011 1111010101 1101111101 0101010111 1111100101 Linguagem de máquina Dados Execução UNIVASF Engenharia da Computação Introdução à Programação @2009 23

Linguagens Compiladas Fases de um compilador Análise Reconhece e divie e programa em partes. Cria uma representação intermediária do programa. Também chamada de fase front end. Síntese A partir da representação intermediária, constrói o programa alvo desejado. Também chamada de fase back end. UNIVASF Engenharia da Computação Introdução à Programação @2009 24

Linguagens Compiladas Fases de um compilador Programa fonte Analisador léxico Gerador de código intermediário Análise (front end) Analisador sintático Otimizador de código Síntese (back end) Analisador semântico Gerador de código Programa alvo Tabela de símbolos UNIVASF Engenharia da Computação Introdução à Programação @2009 25

Linguagens Compiladas Fases de um compilador Análise Análise Léxica O programa é scaneado e agrupado em tokens. Análise Sintática O tokens que foram reconhecidos na fase de análise léxica são agrupados hierarquicamente em uma árvore sintática. Análise Semântica O programa é verificado para garantir que seus componentes se combinam de forma significativa UNIVASF Engenharia da Computação Introdução à Programação @2009 26

Linguagens Compiladas Fases de um compilador Síntese Geração de Código Intermediário Gera uma representação intermediária do código final. O código intermediário é de fácil produção, otimização, e tradução para o código de máquina. Facilita a portabilidade e a otimização do código final. Otimização de Código Fase que visa melhorar o código intermediário. É capaz de fazer transformações de tipo, por exemplo de inteiro para real, que seja necessário. Geração de Código Fase final da compilação onde o código de máquina é gerado. Nesta fase as instruções do código intermediário são traduzidas para código de máquina. UNIVASF Engenharia da Computação Introdução à Programação @2009 27

Linguagens Compiladas Fases de um compilador Tabela de Símbolos Estrutura de dados que contém um registro para cada identificador, com campos contendo seus atributos. Permite encontrar rapidamente cada registro, armazenar e recuperar dados. A tabela é preenchida e usada por todas as fases. Os identificadores são inseridos na tabela durante a análise léxica, mas o tipo não é conhecido no momento em que é inserido. UNIVASF Engenharia da Computação Introdução à Programação @2009 28

Linguagens Compiladas Fases de um compilador Detecção de Erros Cada fase do processo de compilação pode gerar mensagens de erro. O compilador é capaz de não parar todo o processo de compilação logo que encontre o primeiro erro. Os erros são agrupados e identificados para, após o processo de compilação, serem apresentados ao usuário do compilador (programador). UNIVASF Engenharia da Computação Introdução à Programação @2009 29

Linguagens Interpretadas Gera código intermediário que é executado, por um programa ou máquina virtual, sem gerar código de máquina. Um interpretador simula a execução de cada instrução ou comando de um programa, de forma que o seu efeito seja reproduzido corretamente, à medida que essa execução se torna necessária. UNIVASF Engenharia da Computação Introdução à Programação @2009 30

Linguagens Interpretadas O tempo de execução de um programa interpretado é maior que o tempo de execução de um programa compilado. As mensagens de erro são mais amigáveis do que as mensagens produzidas por um compilador. UNIVASF Engenharia da Computação Introdução à Programação @2009 31

Linguagens Interpretadas Visão geral Interpretação int main() { if (a > b) { a = 1; b = 2; } } Programa fonte Linguagem de programação Dados 0001110101 Linguagem de máquina Execução UNIVASF Engenharia da Computação Introdução à Programação @2009 32

Linguagens Interpretadas Visão geral: Máquina Virtual int main() { if (a > b) { a = 1; b = 2; } } Programa fonte Linguagem de programação Dados ABBCDDED AABBDBDB DBABABDB DBBDBDAA Interpretação Código intermediário 0001110101 Linguagem de máquina Execução UNIVASF Engenharia da Computação Introdução à Programação @2009 33