Upload
zilda-dias-silva
View
219
Download
3
Embed Size (px)
Citation preview
Equipe:Fernando Calheiros ([email protected])
Flavia Leite ([email protected])Eduardo Wagner ([email protected])
Renata Bezerra ([email protected])
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