MAC 0316/5754 Conceitos de Linguagens de Programação Primeiro Semestre de 2011 Primeira Prova 29 de março de 2011

Documentos relacionados
Nome do aluno: Assinatura: N ō USP: 1. Preencha o cabeçalho acima. 2. Não destaque as folhas deste caderno.

MAC 0316/5754 Conceitos de Linguagens de Programação Primeiro Semestre de 2011 Terceira Prova 21 de junho de 2011

CCM0118 Computação I Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Segunda Prova 25 de outubro de 2012

MAC 2166 Introdução à Computação para Engenharia Escola Politécnica Primeiro Semestre de 2003 Primeira Prova 2 de abril de 2003

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 05 de abril de 2010

Semântica de Linguagens de Programação

DURAÇÃO DA PROVA: 2 horas

DURAÇÃO DA PROVA: 2 horas

DURAÇÃO DA PROVA: 2 horas

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 07 de abril de 2008

DURAÇÃO DA PROVA: 2 horas

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Terceira Prova 20 de junho de 2011

DURAÇÃO DA PROVA: 2 horas

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Segunda Prova 19 de maio de 2008

Linguagens de Programação. Trabalhos. Carlos Bazilio

DURAÇÃO DA PROVA: 2 horas

Sequências e streams

Linguagens Formais e Autômatos

Segunda Prova 20 de junho de DURAÇÃO DA PROVA: 90m

Compiladores - JACC. Fabio Mascarenhas

Linguagens de Programação

Variáveis e instruções de repetição

Instituto de Física Segundo Semestre de Diurno. Prova Substitutiva 15/12/2000

Primeira Prova de Linguagens de Programação - DCC024B -

Compiladores II. Fabio Mascarenhas

Paradigmas de Programação

Linguagens de Programação

Escola Politécnica Prova Substitutiva 8 de julho de 2014

Compiladores Ficha de exercícios práticos

Lista 02: Pilhas & Filas

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

Listas. CIC/UFRGS INF Fundamentos de Algoritmos 2006/1

Fundamentos de Programação

DURAÇÃO DA PROVA: 2 horas

Linguagens de Programação

Linguagens de Programação Classificação

Conceitos de Linguagem de Programação - 2

Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente

Linguagens de Programação. Trabalhos. Carlos Bazilio

Tipos Abstratos de Dados. Estrutura de Dados

Estruturação de Procedimentos

Fundamentos de Algoritmos

Federal de Alagoas. Universidade PROVA PRÁTICA 14. ASSISTENTE DE LABORATÓRIO. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

Sub-algoritmos (ou Funções)

Linguagens de Programação

Fundamentos de Programação

Linguagens de Programação

Fundamentos da Programação de Computadores

MAT Geometria Analítica Licenciatura em Matemática

Tipo de argumentos. valor. argumentos

Leia estas instruções:

Lembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)

Folha 4.2 Análise sintática ascendente

Pragmática das Linguagens de

Conceitos de Linguagens de Programação

Implementação de Linguagens

Análise Sintática Bottom-up

Linguagens de Programação Aula 4

Fundamentos da Programação

Desenvolvimento de Aplicações Desktop

Primeira Prova 25 de abril de DURAÇÃO DA PROVA: 90m

Introdução à Programação

Compiladores. Conceitos Básicos

Fundamentos da Programação

Federal de Alagoas. Universidade PROVA PRÁTICA 06. TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

Familiarização com a ferramenta JavaCC

Naturais. Paradigma de Programação Funcional. Marco A L Barbosa

Introdução à Computação para Engenharia MAC2166 Prof. Dr. Paulo Miranda IME-USP. Aula 1 Introdução à Computação

1 o Teste de ICE-B, 4 de Maio de 2019 (Versão A)

Behavioral Patterns - Interpreter

Fundamentos de Programação

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Federal de Alagoas. Universidade PROVA PRÁTICA 04. TÉCNICO DE LABORATÓRIO/ QUÍMICA. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

: 16/11/2004. Custódio Dirceu Marcus Vinícius ! " # $

Introdução ao Python. Programa Computacional

Federal de Alagoas. Universidade PROVA PRÁTICA 10. TÉCNICO EM ELETROTÉCNICA. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

Tipos de Dados Simples (Continuação)

Federal de Alagoas. Universidade PROVA PRÁTICA 07. TÉCNICO EM AGROPECUÁRIA. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

Lista de Linguagens de Programação 7

Computação I - Python

Computação e Programação

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

Linguagens de Programação

Federal de Alagoas. Universidade PROVA PRÁTICA 09. TÉCNICO EM ELETROELETRÔNICA. (Editais nº 31 e 81/2016) UNIVERSIDADE FEDERAL DE ALAGOAS

CCM0118 Computação I

Compiladores - Especificando Sintaxe

Questão Valor Nota Total 10.0

Universidade Federal de Alfenas

Revisão. Fases da dacompilação

Laboratório 01 NetBeans

AULA 13 PROCEDIMENTOS. Disciplina: Algoritmos e POO Professora: Alba Lopes.

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Analisadores Descendentes Tabulares; Cjs First Follow

Prova Final de Linguagens de Programação - DCC024B -

Fundamentos de Programação

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Informática para Ciências e Engenharias 2013/14. Teórica 3

Linguagens de Programação

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

Fundamentos da Programação

Transcrição:

MAC 0316/5754 Conceitos de Linguagens de Programação Primeiro Semestre de 2011 Primeira Prova 29 de março de 2011 Nome do aluno: Assinatura: N ō USP: Instruções: 1. Preencha o cabeçalho acima. 2. Não destaque as folhas deste caderno. 3. A prova tem 4 questões. Antes de começar a trabalhar verifique se o seu caderno de questões está completo. 4. A prova deve ser resolvida individualmente. Não é permitida a consulta a livros, apontamentos ou colegas. 5. Não é permitido o uso de folhas avulsas para rascunho. Boa prova! Questão Valor Nota 1 2,5 2 3,0 3 3,0 4 1,5 Total 10,0

Questão 1 (1,0 + 1,5 pontos) (a) Escreva uma função emparelha, que recebe duas listas l1 e l2 e devolve uma lista cujos elementos são listas de comprimento dois. Cada uma dessas listas de comprimento dois tem seu primeiro elemento obtido da lista l1 e seu segundo elemento obtido da lista l2. Exemplos de uso da função emparelha: > (emparelha (1 2 3 4 5) (a b c d e)) ((1 a) (2 b) (3 c) (4 d) (5 e)) > > (emparelha (1 2 3) (a b c d e)) ((1 a) (2 b) (3 c)) > > (emparelha (1 2 3 4 5) (a b)) ((1 a) (2 b)) Note que o valor da função emparelha é uma lista de comprimento igual ao da menor (a mais curta) das duas listas passadas como parâmetros à função. (b) Reescreva a sua função emparelha de modo que a área de memória empregada pela pilha de execução tenha tamanho constante (em vez de ser proporcional ao comprimento da menor das listas que se deseja emparelhar). Sugestão: Crie uma função auxiliar, seguindo uma estratégia análoga à vista em classe para a função map, e faça a nova função emparelha chamar a função auxiliar.

Questão 2 (1,5 + 1,5 pontos) (a) Escreva uma função medias, que recebe uma função crit e duas listas l1 e l2. Cada uma dessas listas contém as notas de uma mesma turma numa prova. O parâmetro crit é uma função que implementa o critério de cálculo da média. A função medias devolve uma lista com as médias da turma calculadas conforme o critério crit. A primeira nota da lista de médias é o resultado da aplicação de crit à primeira nota da lista l1 e à primeira nota da lista l2, a segunda nota da lista de médias é o resultado da aplicação de crit à segunda nota da lista l1 e a segunda nota da lista l2, etc. Exemplo de uso da função medias: > (medias (lambda (p1 p2) (/ (+ p1 p2) 2)) (100 50 70 40) (90 80 70 60)) (95 65 70 50) (b) Reescreva a função medias, agora usando a função map de Scheme e a função emparelha da questão 1.

Questão 3 Este analisador sintático (parser) para a linguagem AE foi extraído do PLAI: (3,0 pontos) ;; parse: s-expression -> AE (define (parse sexp) (cond [(number? sexp) (num sexp)] [(list? sexp) (case (first sexp) [(+) (add (parse (second sexp)) (parse (third sexp)))] [(-) (sub (parse (second sexp)) (parse (third sexp)))])])) Usando a função acima como base, escreva um analisador sintático para a linguagem F1WAE. Esta é a definição, em BNF, da sintaxe concreta da linguagem F1WAE: <F1WAE> ::= <num> {+ <F1WAE> <F1WAE>} {with {<id> <F1WAE>} <F1WAE>} <id> {<id> <F1WAE>} Esta é a definição, em PLAI Scheme, da sintaxe abstrata da linguagem F1WAE: (define-type F1WAE [num (n number?)] [add (lhs F1WAE?) (rhs F1WAE?)] [with (name symbol?) (named-expr F1WAE?) (body F1WAE?)] [id (name symbol?)] [app (fun-name symbol?) (arg F1WAE?)]) Seu analisador sintático não precisa fazer deteção e tratamento de erros sintáticos. Basta que ele funcione para programas sintaticamente corretos.

Questão 4 Este interpretador para a linguagem F1WAE usa substituição postergada: (1,5 pontos) ;; interp: F1WAE listof(fundef) DefrdSub-> number (define (interp expr fun-defs ds) ; Funç~ao extraída do PLAI (type-case F1WAE expr [num (n) n] [add (l r) (+ (interp l fun-defs ds) (interp r fun-defs ds))] [with (bound-id named-expr bound-body) (interp bound-body fun-defs (asub bound-id (interp named-expr fun-defs ds) ds))] ; <-------------- (1) E se aqui tivéssemos (mtsub) em vez de ds? [id (v) (lookup v ds)] [app (fun-name arg-expr) (local ([define the-fun-def (lookup-fundef fun-name fun-defs)]) (interp (fundef-body the-fun-def) fun-defs (asub (fundef-arg-name the-fun-def) (interp arg-expr fun-defs ds) (mtsub))))])) ; <----- (2) E se aqui tivéssemos ds em vez de (mtsub)? (a) Escreva uma expressão na linguagem F1WAE que mostre que o ds no ponto (1) não pode ser substituído por (mtsub). Em outras palavras, escreva uma expressão na sintaxe concreta da linguagem F1WAE que (depois de traduzida para a sintaxe abstrata) não seja avaliada corretamente por uma versão da função interp com a modificação sugerida no ponto (1). Forneça também os valores dos argumentos fun-defs e ds que devem ser passados à função interp juntamente com a expressão. (b) Escreva uma expressão na linguagem F1WAE que mostre que o (mtsub) no ponto (2) não pode ser substituído por ds. Em outras palavras, escreva uma expressão na sintaxe concreta da linguagem F1WAE que (depois de traduzida para a sintaxe abstrata) não seja avaliada corretamente por uma versão da função interp com a modificação sugerida no ponto (2). Forneça também os valores dos argumentos fun-defs e ds que devem ser passados à função interp juntamente com a expressão.

Rascunho (não destacar esta página do caderno de questões)