removendo partialinstantiatorvisitor
Post on 03-Jan-2016
20 Views
Preview:
DESCRIPTION
TRANSCRIPT
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)
Removendo PartialInstantiatorVisitor
InterpreterO padrão Interpreter é usado quando se quer
construir um interpretador para uma linguagemÉ recomendado para implementar linguagens
simplesVantagens
Representar cada regra da gramática em uma classe torna a linguagem mais fácil de implementar
Como a gramática é representada por classes, é possível mudar ou estender facilmente a linguagem
Ao adicionar novos métodos na estrutura de classes, pode-se ter novos comportamentos além da interpretação, como uma validação mais sofisticada do programa
InterpreterUso e Desvantagens
É apropriado quando você tem uma gramática simples e simplicidade é mais importante do que eficiência
Usado para linguagens de script e de programação
Esse padrão pode se tornar difícil quando o número de regras da gramática é grandeNesses casos um gerador de parser/compilador
pode ser mais apropriado
VisitorO padrão Visitor é usado quando se quer
adicionar funcionalidades a uma composição de objetos e encapsulamento não é importante
VantagensPermite adicionar operações a uma estrutura
composta sem mudar a estrutura em siAdicionar novas operações é relativamente
fácilO código das operações realizadas pelo
Visitor é centralizado
VisitorDesvantagens
O encapsulamento das classes compostas é quebrado quando o Visitor é usado
Como uma função de travessia está envolvida, mudanças à estrutura se tornam mais difíceis
Por que usar Visitor?Visitor permite a separação do algoritmo da
estrutura sobre a qual ele operaCódigo fica centralizado
PartialInstatiatorVisitorNã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
ValorFuncaoavaliar() usa o visitor
Funções parciais (o problema)let fun add x = fn y . x + y in
let var id = add(0), var x = 4 in id(1)
Por que esse código não é avaliado corretamente sem mudar a forma como as expressões são avaliadas?
Avaliação parcialAtualmente métodos avaliar() não foram
feitos pensando em avaliação parcialÉ um concern crosscuting!Retornam Valor, não Expressao
PartialInstatiatorVisitorImplementa avaliação parcial através de
reescritas das expressõesEvita mudanças em praticamente todas as
classes que herdam de Expressao
top related