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 PartialInstatiatorVisitor
Faz a avaliação parcial de funções
Não é propriamente um Visitor
No padrão visitor cada classe sabe se visitar, recebendo o visitor em ummétodo visit
PartialInstatiatorVisitor utiliza reflexão para determinar qual método visitdele mesmo deve ser chamado, deixando a estrutura original intocada
Novo Visitor
Não copiar código
Utilizar o padrão visitor
Reutilizar as classes existentes
Problema
C:\Documents and Settings\ewma\My Documents\visitor.png
C:\Documents and Settings\ewma\Local Settings\Temporary Internet Files\Content.IE5\5UNI1JXU\MCj04344030000[1].wmf
Problema
C:\Documents and Settings\ewma\Local Settings\Temporary Internet Files\Content.IE5\QEQZ9278\MCj04344110000[1].wmf
Funções parciais
let 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 + yfn y. y
Avaliação parcial
Praticamente todas as classes foram copiadas para LF2
avaliar() não deve retornar Valor
Nova assinatura:
Expressao avaliar(AmbienteExecucao amb) throwsVariavelNaoDeclaradaException, VariavelJaDeclaradaException;
Todas as classes que estendem Expressao foram modificadas
Avaliação parcial de expressões
Soma
Avalia-se o lado esquerdo e o lado direito da soma
Caso feliz:
Ambos são inteiros, retornar um ValorInteiro com a soma dos dois
O que acontece quando não consigo avaliar x + 0 no exemplomostrado anteriormente?
Retorna-se uma nova ExpSoma com os lados esquerdo e direito avaliadosparcialmente (sendo possível que um esteja avaliado completamente)
Pelo menos um dos lados foi avaliado
parcialmente
Mudança no Ambiente
ContextoExecucao agora é parametrizado com Expressao, aoinvés de Valor
Ids podem ser associados a expressões parcialmente avaliadas
Não apenas ValorFuncao parcialmente avaliado!
Tudo pode ser parcialmente avaliado agora
Avaliação de Id
Procura no contexto
Id não encontrado
Avaliação falha
Id encontrado
Com Expressao
Retorna a expressao
Sem expressao
Retorna o próprio Id
Avaliação de ValorFuncao
Coloca no ambiente os ids dos parâmetros
Caso o resultado da avaliação seja um valor concreto
Retorna o valor obtido
Se não...
Retorna um novo ValorFuncao com a expressão parcialmenteavaliada
Melhores resultados
Retorna 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