Design Patterns
Interpreter
Bernardo Evangelho Miranda

O interpreter é um padrão comportamental(está
interessado na comunicação entre os objetos).

Seu objetivo é criar uma maneira de incluir elementos de
linguagem dentro de programas.

Dada uma linguagem, defina uma representação para sua
gramática juntamente com um interpretador que usa a
representação para interpretar sentenças na linguagem.

Mapeie um domínio para uma linguagem, a linguagem para
uma gramática, e a gramática para uma hierarquia
orientada a objeto.
Propósito

Uma classe de problemas ocorre
repetidamente em um domínio bem
conhecido e compreendido. Se o domínio
for caracterizado por uma linguagem,
então os problemas podem ser facilmente
resolvidos utilizando interpretação.
Motivação

O padrão Interpreter discute: a definição de uma
linguagem de domínio (caracterização do problema, por
exemplo) como uma gramática de linguagem,
representando regras de domínio como sentenças da
linguagem, e interpretando estas sentenças para resolver o
problema.

O padrão usa uma classe para representar cada regra
gramatical. E uma vez que as gramáticas são geralmente
hierárquicas, orientação a objeto é o melhor caminho.

Exemplos do padrão:
- Linguagens de pesquisa de banco de dados como SQL;
- Linguagens especializadas de computador utilizadas para
protocolos de comunicação.
Aplicabilidade
Estrutura

Abstract Expression: classe abstrata que
especifica o método interpret().

Terminal Expression e NonTerminalExpression:
subclasses concretas que implementam interpret
(), recebendo como argumento o estado atual do
fluxo de linguagem, e adicionando sua
contribuição para a resolução do problema.
Terminal são expressões atômicas, enquanto que
nãoTerminais são expressões compostas.

Contexto: encapsula o estado atual do input e do
output
Participantes

Facilidade em modificar e extender a
gramática

Facilidade em implementar a gramática
também

Facilidade em adicionar novas maneiras
de interpretar expressões
Consequências

Exemplo gramática
-expressão ::= multiplicação | divisão | variáveis
-multiplicação ::= expressão ‘*'
-divisão ::= expressão ‘/'
-variáveis ::= 'a' | 'b' | 'c’ | … | ‘z’

Exemplos de expressões
-ab*
-cba*/
-dh*am//
Exemplo
Código
Código
Download

Slide - (LES) da PUC-Rio