Buscar

padrao-visitor

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

Universidade Federal de Pernambuco
Centro de Informática
Pós-graduação em Ciência da Computação
2009.1
Documento de escopo do projeto
Paradigma de Linguagens de Programação
Equipe: Eduardo Almeida – 	ewma@cin.ufpe.br
 Fernando Calheiros – 	fhcl@cin.ufpe.br
 Flávia Soares – 	fls@cin.ufpe.br
 Renata Bezerra – 	rbsa@cin.ufpe.br
Recife, Abril de 2009
1 - Contexto 
	
Dentre os padrões de projeto existentes, dois deles são de particular interesse para estruturar o projeto de linguagens: o Interpreter e o Visitor. O primeiro tem como propósito, dada uma linguagem, criar uma representação para a gramática da linguagem, juntamente com um interpretador que usa esta representação para interpretar sentenças na linguagem. O padrão Interpreter usa classes para representar cada regra de uma gramática; sua estrutura é apresentada na Figura 1, seguida da explicação de cada participante.
Figura 1 Estrutura do padrão Interpreter
– AbstractExpression
Define um método abstrato Interpret que será comum a todos os nós em uma árvore sintática.
– TerminalExpression
Implementa um método Interpret associado a símbolos terminais da gramática.
Uma instancia é requerida para todos os símbolos terminais de uma sentença.
– NonTerminalExpression
Esta classe é requerida para cada regra R::= R1 R2 ... Rn na gramática.
Implementa o método Interpret para os símbolos não terminais da gramática.
Mantém variáveis do tipo AbstractExpression para cada símbolo R.
– Context
Contém informações que são globais ao interpretador.
– Client
Constrói (ou é dada) uma árvore sintática abstrata representando uma sentença particular na linguagem definida pela gramática. Esta árvore sintática é montada através de instancias das classes NonTerminalExpression e TerminalExpression.
Chama o método Interpret.
O padrão Visitor tem como objetivo representar uma operação a ser realizada nos elementos de uma estrutura de objetos. Ele permite que você defina uma nova operação sem alterar as classes dos elementos nos quais a operação atua. A Figura 2 apresenta a sua estrutura e em seguida seus participantes são detalhados.
Figura 2 Estrutura do padrão Interpreter
– Visitor
Declara uma operação de visita para cada classe de ConcreteElement na estrutura de objetos.
O nome da operação identifica a classe que está chamando o Visitor.
Desta forma, o Visitor sabe a classe concreta do elemento sendo visitado e pode acessar este objeto por sua interface.
– ConcreteVisitor
Implementa cada operação declarada pelo Visitor. Cada operação implementa um fragmento do algoritmo definido para a classe correspondente de objetos na estrutura.
O ConcreteVisitor pode acumular estado durante a varredura da estrutura de objetos.
– Element
Define uma operação accept() que recebe um Visitor.
– ConcreteElement
Implementa uma operação accept() que recebe um Visitor e chama a operação de visita apropriada deste Visitor.
– Object Structure
Pode enumerar seus elementos.
Pode prover uma interface de mais alto nível para que o Visitor visite os elementos.
É freqüentemente um Composite, mas pode ser uma coleção simples.
�
2 - Objetivo 
Como o padrão adotado pela disciplina de Paradigmas de Linguagens de Programação é o padrão Interpreter, e existe uma implementação do padrão Visitor na LF2, para dar suporte à utilização de funções de alta ordem (funções podendo ser passadas por parâmetro, e também serem retornadas como um valor), este projeto tem o objetivo de retirar a implementação do Visitor existente em LF2, substituindo por uma implementação representada pelo padrão Interpreter, seguindo o mesmo princípio das demais linguagens implementadas. A BNF da linguagem se mantém, uma vez que a gramática continua a mesma e apenas uma mudança de padrão será realizada.
�
3 - Referências
[1] http://wiki.les.inf.puc-rio.br/uploads/3/36/Interpreter.pdf
[2] http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/pat/visitor.htm

Outros materiais