importjava.util.LinkedHashMap;importjava.util.Map;importjava.util.Set;importjava.util.TreeMap;importjava.util.TreeSet;public classFirst {private Map> first = new TreeMap>();private Map mp = null;public First(Mapmp) {super();this.mp =mp;
}public Map>getFirstSet(){returnfirst;
}private SetfindFirst(String curNode, String[] rightNodes){if(first.containsKey(curNode)) returnfirst.get(curNode);
Set st = new TreeSet();for(int i=0; i
String nextNode= ""+rightNodes[i].charAt(j);if(!mp.containsKey(nextNode)){//终结点
st.add(nextNode.charAt(0));break;
}else{//非终结点
if(j+1
nextNode+= rightNodes[i].charAt(j+1);++j;
}if(mp.containsKey(nextNode)){
Set tmpSt =findFirst(nextNode, mp.get(nextNode));
st.addAll(tmpSt);if(!tmpSt.contains(‘$‘))break;
}
}
}
}