Tuesday, 19 April 2016

Interpreter pattern : Example


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.

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);
     }
}

No comments:

Post a Comment

Note: only a member of this blog may post a comment.