Skip to content

Commit 264cf7e

Browse files
committed
Update README.md
1 parent 1a33b3c commit 264cf7e

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@
150150
##Interpreter
151151
**Intent:** Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
152152

153+
![alt text](https://github.com/iluwatar/java-design-patterns/blob/master/interpreter/etc/interpreter.jpg "Interpreter")
154+
155+
**Applicability:** Use the Interpreter pattern when there is a language to interpret, and you can represent statements in the language as abstract syntax trees. The Interpreter pattern works best when
156+
* the grammar is simple. For complex grammars, the class hierarchy for the grammar becomes large and unmanageable. Tools such as parser generators are a better alternative in such cases. They can interpret expressions without building abstract syntax trees, which can save space and possibly time
157+
* efficiency is not a critical concern. The most efficient interpreters are usually not implemented by interpreting parse trees directly but by first translating them into another form. For example, regular expressions are often transformed into state machines. But even then, the translator can be implemented by the Interpreter pattern, so the pattern is still applicable
158+
153159
##Iterator
154160
**Intent:** Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
155161

0 commit comments

Comments
 (0)