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