| 1 package com.daffodilwoods.daffodildb.utils.parser; 2 3 public abstract class ProductionRulesWithHashMap extends ProductionRules implements java.io.Serializable { 4 5 ProductionRulesWithHashMap(ClassLoader classLoader0){ 6 super(classLoader0); 7 } 8 9 10 Object parse(ParseElements pe) throws com.daffodilwoods.database.resource.DException{ 11 int position = pe.position; 12 Object key = getKey(nameOfRule,position,pe.recursionState); 13 Object 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 []{object,new Integer (pe.position)} ); 23 pe.position = position; 24 return object; 25 } 26 pe.successfulRule.put(key,new Object []{object,new Integer (pe.position)} ); 27 return object; 28 } 29 30 31 private Object getFromStoredResult(ParseElements pe,Object key){ 32 Object ruleObject = pe.successfulRule.get(key); 33 if(ruleObject != null){ 34 Object [] object = (Object [])ruleObject; 35 pe.position = object[1].hashCode(); 36 return object[0] ; 37 } 38 return null; 39 } 40 68 public Object getKey(String nameOfRule, int position, String 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 (hashCode); 73 } 74 } 75 76 | Popular Tags |