Você está na página 1de 26

INF011 Padres de Projeto

18 Interpreter
Sandro Santos Andrade
sandroandrade@ifba.edu.br
Instituto Federal de Educao, Cincia e Tecnologia da Bahia
Departamento de Tecnologia Eletro-Eletrnica
Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Propsito:

Dada uma linguagem, definir uma representao para a


sua gramtica e um interpretador que usa esta
representao para interpretar sentenas da linguagem

Motivao:

Pode ser interessante representar instncias de um


problema como sentenas escritas em uma linguagem
simples
Utiliza-se ento um interpretador que resolve o problema
interpretando estas sentenas
Ex: busca por padres em strings
INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Motivao:

Ex: gramtica para definio de expresses regulares:

Uma classe para cada regra gramatical


Smbolos do lado direito de uma regra so representados
como atributos da classe
Classes da gramtica acima: RegularExpression (abstrata) e
quatro sub-classes: LiteralExpression,
AlternationExpression, SequenceExpression e
RepetitionExpression

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Motivao:

Ex: gramtica para definio de expresses regulares:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Motivao:

Ex: gramtica para


definio de expresses
regulares:
Cada expresso
regular
representada por
uma rvore sinttica
abstrata formada por
instncias dessas classes

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Aplicabilidade:

Quando a gramtica for simples. Para gramticas


complexas uma melhor alternativa utilizar os geradores
automticos de parsers
Quando eficincia no for um problema crtico. Os
interpretadores mais eficientes no utilizam rvores
sintticas diretamente e sim outras estruturas, tais como
autmatos

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Estrutura:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Participantes:

AbstractExpression (RegularExpression):

Declara a operao abstrata interpret() comum a todos os


ns da rvore sinttica abstrata

TerminalExpression (LiteralExpression):

Implementa a operao interpret() associada a smbolos


terminais da gramtica
Uma instncia desta classe requerida para cada
smbolo terminal da sentena

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Participantes:

NonTerminalExpression (AlternationExpression, etc):

Uma instncia desta classe requerida para cada regra


de produo R ::= R1 R2 Rn da gramtica
Mantm atributos do tipo AbstractExpression para cada
um dos smbolos R1 R2 Rn
Implementa a operao interpret() para smbolos
no-terminais da gramtica, geralmente invocando a
prpria operao interpret() nos atributos R1 R2 Rn

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Participantes:

Context:

Contm informaes globais do interpretador

Client:

Constri (ou obtm) uma rvore sinttica abstrata


representando uma sentena particular na linguagem
definida pela gramtica
Invoca a operao interpret()

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Colaboraes:

O cliente contri (ou obtm) a sentena, sob a forma de


uma rvore sinttica abstrata, inicializa o contexto e invoca
a operao interpret()
Cada n NonTerminalExpression define interpret() em
termos de invocaes de interpret() em cada
sub-expresso
A operao interpret() em cada TerminalExpression o
caso base da recurso
A operao interpret() em cada n usa o contexto para
armazenar e acessar o estado do interpretador

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Consequncias:

fcil modificar e estender a gramtica:

Pode-se utilizar herana para isso


Novas expresses podem ser definidas como variaes
das antigas

Implementar a gramtica fcil:

As classes que representam os ns da rvore tm


implementao similar e podem ser automaticamente
geradas por ferramentas apropriadas

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Consequncias:

Gramticas complexas so difceis de manter:

Outros padres podem ser utilizados para minimizar este


problema
Mesmo assim, para gramticas com muitas regras os
geradores de parsers representam uma melhor soluo

Adicionando novas formas de interpretao:

Pode-se criar novas operaes por exemplo para suportar


type-checking
Se muitas formas de interpretao forem necessrias, o
padro Visitor pode ser til

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Implementao:

Criando a rvore sinttica abstrata:

Opes: parser dirigido por tabelas, descendente


recursivo, etc

Definindo a operao interpret():

O padro Interpreter no define como a rvore criada,


ou seja, no resolve o problema de parsing

A operao interpret() no precisa necessariamente estar


nas classes de expresso, pode-se utilizar o Visitor

Compartilhando smbolos terminais com o Flyweight:

Motivado pela ocorrncia constante dos mesmos


terminais

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Cdigo exemplo:

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Usos conhecidos:

Compiladores

SPECTalk

QOCA

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Interpreter

Padres relacionados:

A rvore sinttica abstrata uma instncia do padro


Composite
O Flyweight pode ser utilizado para compartilhar instncias
dos smbolos terminais
Pode-se utilizar o Iterator para percorrer a estrutura
O Visitor pode ser utilizado para manter o comportamento
de cada n da rvore sinttica abstrata em uma nica
classe

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

INF011 Padres de Projeto


18 Interpreter
Sandro Santos Andrade
sandroandrade@ifba.edu.br

Instituto Federal de Educao, Cincia e Tecnologia da Bahia


Departamento de Tecnologia Eletro-Eletrnica
Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas

INF011 Padres de Projeto Graduao Tecnolgica em Anlise e Desenvolvimento de Sistemas Sandro S. Andrade

Você também pode gostar