Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite...

Preview:

Citation preview

Equipe:Fernando Calheiros (fhcl@cin.ufpe.br)

Flavia Leite (fls@cin.ufpe.br)Eduardo Wagner (ewma@cin.ufpe.br)

Renata Bezerra (rbsa@cin.ufpe.br)

Avaliação Parcial de Funções

Relembrando PartialInstatiatorVisitorFaz a avaliação parcial de funçõesNão é propriamente um Visitor

No padrão visitor cada classe sabe se visitar, recebendo o visitor em um método visit

PartialInstatiatorVisitor utiliza reflexão para determinar qual método visit dele mesmo deve ser chamado, deixando a estrutura original intocada

Novo VisitorNão copiar códigoUtilizar o padrão visitorReutilizar as classes existentes

Problema

Problema

Funções parciaislet fun add x = fn y . x + y in

let var id = add(0) in id(1)

Avaliação parcial de add(0):fn y . 0 + y

fn y. y

Avaliação parcialPraticamente todas as classes foram

copiadas para LF2

avaliar() não deve retornar ValorNova assinatura:

Expressao avaliar(AmbienteExecucao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException;

Todas as classes que estendem Expressao foram modificadas

Avaliação parcial de expressõesSoma

Avalia-se o lado esquerdo e o lado direito da soma

Caso feliz:Ambos são inteiros, retornar um ValorInteiro com a

soma dos doisO que acontece quando não consigo avaliar x

+ 0 no exemplo mostrado anteriormente?Retorna-se uma nova ExpSoma com os lados

esquerdo e direito avaliados parcialmente (sendo possível que um esteja avaliado completamente)

Pelo menos um dos lados foi avaliadoparcialmente

Mudança no AmbienteContextoExecucao agora é parametrizado

com Expressao, ao invés de ValorIds podem ser associados a expressões

parcialmente avaliadasNão apenas ValorFuncao parcialmente avaliado!

Tudo pode ser parcialmente avaliado agora

Avaliação de IdProcura no contexto

Id não encontradoAvaliação falha

Id encontradoCom Expressao

Retorna a expressaoSem expressao

Retorna o próprio Id

Avaliação de ValorFuncaoColoca no ambiente os ids dos parâmetrosCaso o resultado da avaliação seja um

valor concretoRetorna o valor obtido

Se não...Retorna um novo ValorFuncao com a

expressão parcialmente avaliada

Melhores resultadosRetorna funções mais bem avaliadas

Especialmente com composição de funções

Nem sempre!Não reduz as operações binárias ao menor

valor possível

Recommended