Home
Core Java
Java
JDBC
Servlets
JSP
EJB
JMS
Struts
Spring
Hibernate
JSF
RMI
CORBA
J2ME
Performance
Tomcat
Weblogic
Design Patterns
Junit
XML
UML
DB2 & SQL
ANT
Free Gift
Contact Us

XML RSS
What is this?
Add to My Yahoo!
Add to My MSN
Add to Google
 

Behavioral Pattern

Interpreter Pattern

Your Ad Here

Creational patterns Structural patterns Behavioral pattern J2EE patterns
Abstract Factory Adapter  Chain of Responsibility
MVC 
Builder Bridge  Command  Business Delegate
Factory method Composite  Interpreter  Composite Entity
Prototype Decorator  Iterator  Data Access Object
Singleton Façade
Mediator  Front Controller

Flyweight  Memento  Intercepting Filter

Proxy  Observer  Service Locator


State  Transfer Object


Strategy 


Template Method



Visitor 

Interpreter Pattern



Define Interpreter pattern
Provides a definition of a macro language or syntax and parsing into objects in a program.

Where to use & benefits
Need your own parser generator.
Translate a specific expression.
Handle a tree-related information.

Related patterns include
  • Composite, which is an instance in an interpreter.
  • Flyweight, which shows how to share symbols with abstract context.
  • Iterator, which is used to traverse the tree structure.
  • Visitor, which is used to maintain behavior of each note in tree structure.

Your Ad Here
Example of Interpreter pattern
Given any string expression and a token, filter out the information you want. The below is a simple parser program. the myParser method can be used to parse any expression. The composite, visit and iterator patterns have been used.

import java.util.*;
class Parser{
    private String expression;
    private String token;
    private List result;
    private String interpreted;
   
    public Parser(String e, String t) {
       expression = e;
       token = t;
    }
   
    public void myParser() { 
        StringTokenizer holder = new StringTokenizer(expression, token);
        String[] toBeMatched = new String[holder.countTokens()]; 
        int idx = 0;
        while(holder.hasMoreTokens()) {
            String item = holder.nextToken();
            int start = item.indexOf(",");
            if(start==0) {
               item = item.substring(2);
            }  
        toBeMatched[idx] = item;
        idx ++;
        }
        result = Arrays.asList(toBeMatched);
     }
     public List getParseResult() {
        return result;
     }
     public void interpret() {
         StringBuffer buffer = new StringBuffer();
         ListIterator list = result.listIterator();
         while (list.hasNext()){
            String token = (String)list.next();
            if (token.equals("SFO")){
               token = "San Francisco";         
            }else if(token.equals("CA")) {
               token = "Canada";
            }
            //...
            buffer.append(" " + token);
         }
         interpreted = buffer.toString();       
     }
     public String getInterpretedResult() {
        return interpreted;
     }
     public static void main(String[] args) {
         String source = "dest='SFO',origin='CA',day='MON'";
         String delimiter = "=,'";
         Parser parser = new Parser(source, delimiter);
         parser.myParser();
         parser.interpret();
         String result = parser.getInterpretedResult();
         System.out.println(result);
     }
}
java Parser
dest San Francisco origin Canada day MON


Your Ad Here




footer for Interpreter Pattern page