KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > utils > parser > ProductionRulesWithHashMap


1 package com.daffodilwoods.daffodildb.utils.parser;
2
3 public abstract class ProductionRulesWithHashMap extends ProductionRules implements java.io.Serializable JavaDoc{
4
5    ProductionRulesWithHashMap(ClassLoader JavaDoc classLoader0){
6       super(classLoader0);
7    }
8
9
10    Object JavaDoc parse(ParseElements pe) throws com.daffodilwoods.database.resource.DException{
11       int position = pe.position;
12       Object JavaDoc key = getKey(nameOfRule,position,pe.recursionState);
13       Object JavaDoc object = getFromStoredResult(pe,key);
14       if(object != null){
15          if(object instanceof ParseException){
16             pe.position = position;
17          }
18          return object;
19       }
20       object = parsePart(pe);
21       if(object instanceof ParseException){
22         pe.successfulRule.put(key,new Object JavaDoc[]{object,new Integer JavaDoc(pe.position)} );
23          pe.position = position;
24          return object;
25       }
26       pe.successfulRule.put(key,new Object JavaDoc[]{object,new Integer JavaDoc(pe.position)} );
27       return object;
28    }
29
30
31    private Object JavaDoc getFromStoredResult(ParseElements pe,Object JavaDoc key){
32       Object JavaDoc ruleObject = pe.successfulRule.get(key);
33       if(ruleObject != null){
34          Object JavaDoc[] object = (Object JavaDoc[])ruleObject;
35          pe.position = object[1].hashCode();
36          return object[0] ;
37       }
38       return null;
39    }
40 /*
41    private void displayTreeRunning(ParseElements pe){
42       pe.parentNode = pe.dTree.createChildNode(pe.parentNode, nameOfRule+" - "+pe.recursionState+ " Running " + pe.position);
43    }
44
45    private void displayTreeFailure(ParseElements pe,boolean found){
46       String str = found ? (nameOfRule+" - "+pe.recursionState+" Failed "+pe.position) : (nameOfRule+" - "+pe.recursionState+" Failed From HashMap "+pe.position);
47       pe.parentNode.setUserObject(str);
48    }
49
50    private void displayTreeSuccess(ParseElements pe,int position,String query,boolean found){
51       String str= ""+pe.position;
52       if ( pe.tokens != null ){
53          for(int i = position; i < pe.position ; ++i){
54             try {
55                str += pe.tokens[i].getClass().getName();
56             }
57             catch (RuntimeException ex) {
58                str = ""+ex;
59             }
60          }
61       }
62       else
63          str += query.substring(position,pe.position)+"]";
64       str = found ? (nameOfRule+" - "+pe.recursionState+" Successful ["+ str +"]") : (nameOfRule+" - "+pe.recursionState+" Successful From HashMap ["+ str+"]");
65       pe.parentNode.setUserObject(str);
66    }
67 */

68    public Object JavaDoc getKey(String JavaDoc nameOfRule, int position, String JavaDoc recursionState){
69      int hashCode = 31 + (nameOfRule==null ? 0 : nameOfRule.hashCode());
70      hashCode += 31*hashCode + position;
71      hashCode += 31*hashCode + (recursionState==null ? 0 : recursionState.hashCode());
72      return new Integer JavaDoc(hashCode);
73    }
74 }
75
76
Popular Tags