Intento:
Dato un linguaggio, il pattern definisce una rappresentazione della propria grammatica attraverso la quale vengono interpretate le sentenze di un linguaggio
Applicabilità:
Il pattern Interpreter è da utilizzare quando vi è un linguaggio da interpretare ed è possibile rappresentare le dichiarazioni dello stesso come alberi sintattici astratti. Interpeter vine sfruttato al meglio quando:
- la grammatica è semplice. Infatti per grammatiche complesse la gerarchia delle classi generate sarebbe troppo complessa ed ingestibile
- L’efficienza non deve essere un aspetto critico.
Partecipanti:
- AbstractExpression → definisce una operazione Interpreter di tipo astratto che è comune a tutti i nodi nell’albero della sintassi
- TerminalExpression → Implementa una operazione di interpretazione con simboli terminali nella sintassi, in più viene richiesta una istanza per ogni simbolo terminale della sintassi
- NonTerminalExpression → ogni classe vine sfruttata per ogni ruolo gestito nella grammatica, vengono mantenute le variabili di istanziazione delle AbstractExpression; infine implementa un interprete per ogni simbolo non terminale della grammatica.
- Context → contiene informazioni che sono globali per l’interprete
- Client → costruisce una sintassi astratta che rappresenta una particolare sentenza in un linguaggio che la grammatica stessa definisce, e invoca l’operazione di interpretazione
Conseguenze:
- E’ facile cambiare e(o estendere una grammatica, dato che il pattern utilizza le classi per rappresentare le regole della grammatica
- Implementare la grammatica è più facile
- Le grammatiche complesse sono difficili da mantenere
- E’ possibile aggiungere nuovi modi per interpretare le espressioni.










[...] Interpreter [...]