在以下方法“follow()”中,有一个名为 followMap 的链接哈希图,该图应输出以下内容:- Follow Map: {S=c,b,d,L,d T=S, L=b,L } 但是,它输出以下内容:- Follow Map: {S=d, T=S, L=L} 这是不正确的。
从调试中我发现它在键“S”中生成所有预期值“c、b、d、L、d”,但是,它以某种方式不断覆盖它们并且只保留最后达到的值“d” “.
我一直在努力解决这个问题,但我不能了。如果有人帮助我,那就太好了。
public String follow() {
first();
System.out.println("Map: "+map);
String follow = "";
String first = "";
String f = "";
for (int i = 0; i < nonTerminals.length; i++) {
String prodRules = map.get(nonTerminals[i]);
String [] prSplit = prodRules.split(",");
for (int j = 0; j < prSplit.length ; j++) {
for (int k = 0; k < prSplit[j].length(); k++) {
first = "";
System.out.println(prSplit[j].charAt(k));
if(!isTerminal(prSplit[j].charAt(k)))
{
follow = followMap.get(prSplit[j].charAt(k));
if(k==prSplit[j].length()-1)
{
if(follow==null)
{
follow = "";
follow+= nonTerminals[i].charAt(0) + "";
followMap.put(prSplit[j].charAt(k)+"",follow);
}
else
{
follow = followMap.get(prSplit[j].charAt(k));
follow+= "," +nonTerminals[i].charAt(0) + "";
followMap.put(prSplit[j].charAt(k)+"",follow);
System.out.println(follow);
}
}
else
{
if(isTerminal(prSplit[j].charAt(k+1)))
{
System.out.println("--follow= "+follow);
if(follow==null)
{
follow = "";
follow+= prSplit[j].charAt(k+1) + "";
followMap.put(prSplit[j].charAt(k)+"",follow);
System.out.println("follow= "+follow);
}
else
{
follow = followMap.get(prSplit[j].charAt(k));
follow+= "," + prSplit[j].charAt(k+1) + "";
followMap.put(prSplit[j].charAt(k)+"",follow);
}
}
else
{
if(followMap.get(prSplit[j].charAt(k))==null)
{
first = firstMap.get(prSplit[j].charAt(k+1));
follow = "";
follow += first;
followMap.put(prSplit[j].charAt(k)+"",follow);
}
else
{
first = firstMap.get(prSplit[j].charAt(k+1));
follow = followMap.get(prSplit[j].charAt(k));
follow += ","+ first;
followMap.put(prSplit[j].charAt(k)+"",follow);
}
}
}
System.out.println("FMap: "+followMap);
}
else
{
}
}
}
}
System.out.println("Follow Map: "+ followMap);
}