Pragmática das Linguagens de
|
|
|
- Ronaldo Alvarenga de Sá
- 8 Há anos
- Visualizações:
Transcrição
1 Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Primeiro Exame/Segundo Teste 17/12/2004 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das respostas deve ser limitado ao espaço fornecido para cada pergunta. Pode usar os versos das folhas para rascunho. O exame tem 5 páginas e a duração é de 2.0 hora. A cotação de cada questão encontra-se indicada entre parêntesis. Boa sorte. 1. (1.5) Podemos classificar os erros de um programa de acordo com o momento em que são detectados e de acordo com a parte do compilador que os detecta. Mostre fragmentos de programas (escritos nas linguagens que preferir) que demonstrem: (a) (0.3) Um erro léxico. Em C um identificador tem de começar por uma letra: int 1b = 5; (b) (0.3) Um erro sintático. Em C uma divisão necessita de dois operandos: printf("result:%d", a /); (c) (0.3) Um erro semântico estático. visível em compile time. int quo = 123 / 0; Em C uma divisão por zero (d) (0.3) Um erro semântico dinâmico. Em C uma divisão por zero invisível em compile time. int quo = 123 / x; //com x = 0 (e) (0.3) Um erro que o compilador não detecta nem gera código para detectar. Em C a indexação de arrays.
2 Número: 2 int v[5] = { 1, 3, 5, 7,9 ;... printf("%d", v[x]); //com x > 4 ou x < 0 2. (3.0) Em Fortran 77 as variáveis locais são tipicamente alocadas estaticamente. Em Algol e seus descendentes (Pascal, C, Ada) as variáveis locais são tipicamente alocadas no stack. Em Common Lisp e Scheme as variáveis locais são alocadas no heap (embora possam ser alocadas no stack em certos casos). (a) (1.5) Dê um exemplo de um fragmento de programa em C (ou Pascal ou Ada) que não funcionará correctamente se as variáveis locais forem alocadas estaticamente. int fact (int n) { if (n == 0) { return 1; else { return n * fact(n - 1); (b) (1.5) Dê um exemplo de um fragmento de programa em Common Lisp (ou Scheme) que não funcionará correctamente se as variáveis locais forem alocadas exclusivamente no stack. (define (make-adder n) (lambda (x) (+ x n))) (define add3 (make-adder 3)) (add3 5) 3. (2.0) O compilador GCC da GNU permite compilar programas escritos usando algumas extensões à linguagem C. Uma dessas extensões é a possibilidade de ter funções dentro de outras funções. Eis um resumo da documentação dessa extensão: 5.4 Nested Functions A nested function is a function defined inside another function. The nested function s name is local to the block where it is defined. The nested function can access all the variables of the containing function that are visible at the point of its definition. For example, here we show a nested function which uses an inherited variable named offset:
3 Número: 3 bar (int *array, int offset, int size) { int access (int *array, int index) { return array[index + offset]; int i; /*... */ for (i = 0; i < size; i++) /*... */ access (array, i) /*... */ It is possible to call the nested function from outside the scope of its name by storing its address or passing the address to another function: hack (int *array, int size) { void store (int index, int value) { array[index] = value; intermediate (store, size); Here, the function intermediate receives the address of store as an argument. If intermediate calls store, the arguments given to store are used to store into array. (a) (1.0) Dadas as características da linguagem C explique as limitações que são expectáveis relativamente à utilização desta extensão. Quando se invoca uma função interna a outra função, é necessário que a função que a contém ainda esteja em execução, caso contrário as referências às variáveis livres da primeira não terão significado. (b) (1.0) Esquecendo as questões de performance, explique as implicações da eliminação das limitações que referiu no ponto anterior. Seria necessário que o ambiente da função interna permanecesse activo mesmo depois da função que a contém ter terminado. Isto implica que esse ambiente passe a ter duração indefinida, só podendo ser eliminado quando se perdem todas as referências para a função interna. Isto sugere ainda a necessidade de ter um mecanismo de recolha de lixo.
4 Número: 4 4. (3.0) Considere o seguinte programa Scheme: (define (misterio i) (define (f1 i f) (if (> i 1) (f) (f1 2 (f3)))) (define (f3) (define (f2) i) f2) (f1 1 f1)) (a) (1.0) Admitindo que Scheme é uma linguagem de âmbito léxico, qual o valor da expressão (misterio 3)? Justifique. Quando f1 é aplicada como resultado da expressão (misterio 3), o teste do if falha e a função f1 invocase recursivamente usando como argumento o resultado da invocação da função f3 que é a função f2. No momento em que esta função é criada, é-lhe associado o ambiente léxico em que i diz respeito ao parâmetro do procedimento misterio que, como não foi alterado, tem o valor 3. Na invocação recursiva de f1, o teste é bem sucedido e é invocada a função f que designa f2 que devolve o valor de i que era 3. (b) (1.0) Admitindo que Scheme era uma linguagem de âmbito dinâmico com shallow binding, qual o valor da expressão (misterio 3)? Justifique. Com shallow binding, a associação entre uma função e o seu ambiente envolvente é feita no momento da aplicação da função. Neste caso, quando f1 é aplicada, o teste do if falha e a função f1 invoca-se recursivamente usando como argumento o resultado da invocação da função f3 que é a função f2. Nesta segunda invocação recursiva, o teste é bem sucedido e é invocada a função f que designa f2 mas é apenas neste momento que se estabelece a associação entre a função f2 e o ambiente envolvente. Neste ambiente, f2 devolve o valor de i que,
5 Número: 5 neste momento, é 2. (c) (1.0) Admitindo que Scheme era uma linguagem de âmbito dinâmico com deep binding, qual o valor da expressão (misterio 3)? Justifique. Com deep binding, a associação entre uma função e o seu ambiente envolvente é feita no momento da criação da função. Neste caso, quando f1 é aplicada, o teste do if falha e a função f1 invoca-se recursivamente usando como argumento o resultado da invocação da função f3 que é a função f2 mas com o ambiente associado contendo a ligação i=1 que é o último valor de i ainda visível em f2. Nesta segunda invocação recursiva, o teste é bem sucedido e é invocada a função f que designa f2 mas cujo valor devolvido é o valor de i no momento em que a função tinha sido criada, que era (0.5) Considere a seguinte expressão escrita em notação infixa: (a + (b - c)) * d A mesma expressão escrita em notação prefixa fica com a seguinte forma: * + a - b c d No entanto, as linguagens da família Lisp empregam uma notação prefixa ligeiramente diferente denominada notação prefixa com parêntesis: (* (+ a (- b c)) d) Explique qual a vantagem da notação prefixa com parêntesis das linguagens Lisp sobre a notação prefixa simples e dê um exemplo onde essa vantagem seja visível por comparação com o mesmo exemplo escrito em notação prefixa simples. A vantagem está na utilização de operadores que podem receber um número variável de operandos. Como exemplo, temos: (* (+ a b (- c d e) f) g h) Em notação infixa simples teríamos de escrever: * * + a + b c d e f g h
Pragmática das Linguagens de Programação 2004/2005
Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Segundo Exame 11/2/2005 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das respostas deve
Fundamentos de Programação
Fundamentos de Programação Primeiro Teste 16 de Abril de 2011 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 7 páginas com 9 perguntas. A cotação de cada pergunta está assinalada
Capítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Fundamentos de Programação
Fundamentos de Programação Soluções do primeiro teste 13 de Novembro de 2004 9:00-10:30 Nota Número: 20 Nome: Turma: Escreva o seu número em todas as folhas do teste. O espaço das respostas deve ser limitado
02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?
01. [Sebesta, 2000] Quais são as questões de projeto referentes a nomes? Nomes, Vinculações, Verificação de Tipos e Escopos 02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre
Linguagens de Programação Funcional
Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A
Nomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Linguagens de Programação Conceitos e Técnicas. Amarrações
Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador
Ambientes de Execução
Ambientes de Execução Organização da memória Ambientes totalmente estáticos, baseados em pilhas e totalmente dinâmicos Passagem de parâmetros Prof. Thiago A. S. Pardo 1 Ambientes de execução na estrutura
Ambientes de Execução
Ambientes de execução na estrutura do compilador programa-fonte Ambientes de Execução Tabela de símbolos analisador léxico analisador sintático Organização da memória Ambientes totalmente estáticos, baseados
Programação em Sistemas Computacionais
Programação em Sistemas Computacionais Linguagem C Introdução, tipos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Jorge Martins ([email protected]) baseado no slides de Pedro Pereira Enquadramento
Compiladores Ambiente de Execução
Compiladores Ambiente de Execução Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica
Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos
Nomes, Vinculações, Verificação de Tipos e Escopos Cristiano Lehrer Nomes (1/6) Um nome é uma string de caracteres usada para identificar alguma entidade de um programa. O termo identificador é utilizado
Conceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Fundamentos da Programação
Fundamentos da Programação Solução da Repescagem do Primeiro Teste 31 de Janeiro de 2013 09:00 10:30 1. De um modo sucinto, (a) (0.5) Diga o que é um processo computacional. Um processo computacional é
Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição
Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação
Nomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Linguagem de Programação e Compiladores
Linguagem de Programação e Compiladores Fernando Antônio Asevedo Nóbrega Instituto de Ciências Matemáticas e de Computação USP SCC-206 Introdução à Compilação 24 de abril de 2012 1 / 20 Sumário 1 Introdução
Expressões e sentença de atribuição
Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Conceitos de Linguagens de Programação
Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 06 ([email protected]) Aula 6 Subprogramas
Compiladores. Introdução à Compiladores
Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc. Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem
Linguagem C. Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira
Linguagem C Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira Centro de Cálculo Instituto Superior de Engenharia de Lisboa João
02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?
01. [Sebesta, 2000] O que é um descritor? 02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais? 03. [Sebesta, 2000] Quais são as questões de projeto relativas aos tipos
Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs
Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto
Fundamentos de Programação
Licenciatura em Engenharia Informática e de Computadores Fundamentos de Programação Trabalho para casa 22 de Setembro de 2008 Este trabalho corresponde à instalação, no seu computador, do interpretador
Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas
Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Argumentos da linha de comando Funções recursivas Programação 2010/2011 DEEC-IST Arg. da linha de comando;
Compiladores Ambiente de Execução
Compiladores Ambiente de Execução Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica
1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre
º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica de Junho de 6 º Semestre Exame sem consulta : 6: h Nome: Número: Escreva o seu número e nome em todas as folhas de exame. O exame
Compiladores. Análise Semântica
Compiladores Análise Semântica Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Análise léxica Análise semântica Síntese Análise sintática Análise Gramáticas Estruturas internas Arquivo
Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio
Linguagens de Programação Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp Nomes Forma mais simples de abstração Um nome é um caracter
DAS5102 Fundamentos da Estrutura da Informação
Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa
ao paradigma imperativo
PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de
Computação e Programação
Computação e Programação 10ª Aula de Problemas Tópicos Avançados sobre Funções Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII Problema 1 3. The velocity of sound in air is 49.02xT^(1/2)
Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre
Correção do º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 3 de Junho de 26, 2º Semestre. (2.) Perguntas de resposta rápida de Fortran (.4 valores cada).. Todos os componentes
Fundamentos de Programação
Fundamentos de Programação Primeiro Teste 6 de Novembro de 200 09:00 0:30 SOLUÇÃO. (.0) Escolha a única afirmação incorrecta. Uma resposta certa vale valor e uma resposta errada desconta 0.4 valores. A.
CANape/vSignalyzer. Data Mining and Report Examples Offline Analysis V
CANape/vSignalyzer Data Mining and Report Examples Offline Analysis V16.0 2018-07-30 Offline Evaluation Tools On-line Tools CANalyzer. Messages CANoe. Messages CANape. Signals Off-line Tools vsignalyzer
Lista 02: Pilhas & Filas
MAC122 Princípios de Desenvolvimento de Algoritmos DCC IME USP 2º Semestre de 2018 Prof.: Dr. Paulo Miranda [email protected] Lista 02: Pilhas & Filas Para as questões envolvendo pilhas, assuma
Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.
Construção de Compiladores Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/22 1 Linguagens de programação 2 Compilação 2/22 Tópicos 1
Implementando subprogramas
Implementando subprogramas Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl
Primeira Prova de Linguagens de Programação - DCC024B -
Primeira Prova de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem
Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica
UNIVERSIDADE ESTADUAL DE SANTA CRUZ CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO DOCENTE: ROGÉRIO VARGAS DISCENTE: MARIANNA NOVAES Semântica SEMÂNTICA Semântica é a área
Fundamentos de Programação
Fundamentos de Programação Solução do Segundo Teste 23 de Janeiro de 2012 09:00 10:30 Nome: Número: 1. (1.0) Explique em que consiste a abstracção de dados, usando os termos barreiras de abstracção, encapsulação
Trabalho Linguagem e Programação de Compiladores
Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:
Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1
Programação de Computadores IV Introdução a Linguagens de Programação Simone Martins [email protected] SLIDES CEDIDOS POR BRUNO MARQUES 1 Arquitetura de programação 2 O Que é um Dado? Dado é o elemento
Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1
Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,
Introdução à Programação em C (I)
Introdução à Programação em C (I) IAED Tagus, 2009/2010 Organização de Ficheiros em C Organização Típica de Ficheiros em C Inclusão de bibliotecas de sistema Inclusão de bibliotecas locais Definição de
Compiladores e Computabilidade
Compiladores e Computabilidade Prof. Leandro C. Fernandes UNIP Universidade Paulista, 2013 GERAÇÃO DE CÓDIGO INTERMEDIÁRIO Geração de Código Intermediário Corresponde a 1ª etapa do processo de Síntese
Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP
Programação I Aula 17 Correção de programas DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Classes de erros 2 Execução passo-a-passo 3 Testes na documentação 4 Asserções 5 Outros erros comuns DCC/FCUP 2019
Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I
Paradigmas Paradigmas Tradicional Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I Paradigmas Tradicional Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I OO Simula-67, Smalltalk, C++, Eiffel, Object Pascal,
