1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres.

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Tipos Explícitos e Tipos Polimórficos para LF1
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Algoritmos e Estrutura de Dados I
Padrão de Projeto Interpreter
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Prof. Heloise Manica Paris Teixeira
Introdução à Linguagem PASCAL Prof. Luis Otavio Alvares
Sistemas Operacionais
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Paradigmas da Programação
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Robson Godoi / Sandra Siebra
Universidade do Vale do Rio dos Sinos - São Leopoldo -
João Lucas de Oliveira Torres
Implementar Listas em Linguagem Funcional II
Introdução a Computação e Cálculo Numérico
LISTAS DUPLAMENTE ENCADEADAS
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Implementação de FILAS com Alocação Dinâmica
Seminário 1: Revisão de C
Prof. Ricardo Santos PONTEIROS
Estudo dos Conceitos e Paradigmas de Programação
Expressões e Instrução de Atribuição
Semântica de Linguagens de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Geração de Código Intermediário
Operadores e Atribuições Capítulo 3
Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
23/08/2004 Centro de Informática - UFPE Projeto 2 de PLP Equipe: Daniel Leitão (dal) Dante Torres (dgt) Pablo Sampaio (pas) Linguagem Imperativa 2 com.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Paradigma funcional.
ARQUIVOS.
1 Linguagem Imperativa 2 com Design by Contract Alunos: Bruno Moreno José Elias Queiroga Yuri Malheiros Samara Martins Prof.: Augusto Sampaio.
Sistema de Transformação para a linguagem OO1 Adeline Sousa Gustavo Santos.
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Computação Eletrônica
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Semântica de Linguagens de Programação
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
ALGORITMIA. ALGORITMO Conjunto de instruções ou acções que ao serem executadas, permitirão realizar uma determinada tarefa.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Semântica em Linguagens de Programação Semântica Denotacional
Projeto II - PLP Prof. Augusto Sampaio
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz.
JAVASCRIPT Programação Web. O que é  E uma linguagem interpretada que e executada na maquina do cliente  Não esta associada ao framework java  Não.
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
UNIVERSIDADE FEDERAL DO AMAZONAS- UFAM INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA- ICET SISTEMAS DE INFORMAÇÃO ALGORITMOS E ESTRUTURAS DE DADOS II PILHAS.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Visual C# (parte 2) Prof. Igor Conrado Alves de Lima – Operadores, estruturas de decisão, vetores (arrays), e estruturas de.
Engenharia de Controle e Automação Computação Para Engenharia Semana /08/2011 Professor Leomir J. Borba- –
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Prof. Tertuliano Operadores Variáveis em C++.
ProgramaçãoConcorrente Glêdson Elias
1 Estruturas Condicionais Aula – Tópico 3 Algoritmos e Estruturas de Dados I (DCC/003)
Mobilidade para Linguagem Orientada a Objetos 1
Transcrição da apresentação:

1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres

2 Ponteiros e Procedimentos de alta ordem em Linguagem Imperativa 2

Versões: Ponteiros com aritmética (LI2P1) Ponteiros sem aritmética + Procedimentos de alta ordem (LI2P2)

Gramática LI2PI Atribuicao ::= Id ":=" Expressao | “*” Id ":=" Expressao ExpUnaria ::= … | “*” Expressao | “&” Id DeclaracaoVariavel ::= "var" Id "=" Expressao | “var *” Id = Expressao Note: Observe que o operador “*” é seguido de uma expressão, desta forma, é dereferenciar uma expressão, esta decisão de projeto habilita aritmética de ponteiros.

ContextoExecucaoImperativa Como funciona? 1.Fornece uma implementação para interface Ambiente 2.Faz um mapeamento direto entre identificadores e valores O que mudamos? 1.Reestruturamos o mapeamento entre identificadores e valores, para torná-lo mais concreto, mapeando identificadores em endereços e endereços em valores.

ContextoExecucaoImperativa Preservamos a assinatura dos métodos incrementa() : void restaura() : void map(idArg : Id, valorId : T) : void get(idArg : Id) : T Adicionamos novos métodos getAddress(idArg : Id) : Integer getValue (adress : Integer) : T proximoEndereco() : Integer

ContextoExecuçãoImperativa { var a = 33, var b = “PLP”, var c = true, var *p = &a } Implementação LI2P1 Ponteiros não possuem tipo especifico.

ContextoExecuçãoImperativa { var a = 33, var b = “PLP”, var c = true, var *p = &a } Implementação LI2P2 Ponteiros não possuem tipo especifico.

Gramática LI2P2 Atribuicao ::= Id ":=" Expressao | “*” Id ":=" Expressao ExpUnaria ::= … | “*” Id | “&” Id DeclaracaoVariavel ::= "var" Id "=" Expressao | “var *” Id = Expressao Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorProcedimento ValorProcedimento = “pc” “(“ ListaDeclaracaoParametro “)” “{“ Comando “}” Tipo ::= … | “ptrstr” | “ptrint” | “ptrbool” | “ ” ListaTipo ::= Tipo | Tipo, ListaTipo

Ponteiros passam a ter tipos internos: PTRINTEIRO, PTRBOOLEANO, PTRSTRING; Ao ocorrer uma atribuição ao local apontado por um ponteiro, é verificado se o tipo do local apontado é compatível com o tipo da expressão r-value (lvalue := rvalue); Operadores binários podem verificar se os tipos dos operandos estão de acordo com os tipos esperados (ex: *a+*b, *a and *b); Eliminamos a possibilidade de definir ponteiros para ponteiros e fazer aritmética de ponteiros.

Procedimentos de alta ordem (LI2P2)

Na Linguagem Imperativa 2 (LI2), procedimentos não possuem status de valor, desta forma, não podem ser atribuídos à variáveis nem ser passados como parâmetros. Na LI2P2 procedimentos passam a ser um valores O ContextoExecucaoImperativa2 em LI2P2 só possui o mapeamento de identificadores em valores. O mapeamento de identificadores em procedimentos foi eliminado. Um programa é um comando

Como expressar o tipo de um procedimento? Tipo ::= … | “ptrstr” | “ptrint” | “ptrbool” | “ ” ListaTipo ::= Tipo | Tipo, ListaTipo Exemplo: proc somaCondicional (int a, int b, boolean c) { if c == true then write (a+b) else skip }; TIPO (somaCondicional) =

Todos na torcida!! Validação dos interpretadores. Parte 1: Ponteiros sem aritmética Parte 2: Ponteiros com aritmética + Procedimento de alta ordem