importhjzgg.first.First;importhjzgg.follow.Follow;importhjzgg.tablenode.TableNode;importhjzgg.treenode.TreeNode;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.Map;importjava.util.Set;importjava.util.Stack;importjava.util.TreeMap;importjava.util.TreeSet;public classAnalysisTable {private final int noFinalCharacterCount = 100;private MapstringToInt = new TreeMap();//分析表行 列 字母映射到数字
private MaptableRow = new TreeMap();//分析表 行列 数字 映射到字母
private MaptableCol = new TreeMap();private String[][] table = new String[noFinalCharacterCount][];//分析表
private SetterminalCharacters = new TreeSet();//终结符集合
private Map> first = null;private Map> follow = null;private Map mp = null;private int nodeCntRow = 0, nodeCntCol=0;public static final int treeNodeCnt = 200;//树最多节点的个数
private int cntTreeNode = 0;private ArrayList usedProduction = new ArrayList();//预测分析中所用到的产生式
private int fatherNode;//treeGraphic搜素是的开始节点
private TreeNode[] treeGraphic = newTreeNode[treeNodeCnt];private String[] analysisStack = null;publicString[] getAnalysisStack(){returnanalysisStack;
}public MapgetStringToInt(){returnstringToInt;
}public SetgetTerminalCharacters(){returnterminalCharacters;
}public intgetFatherNode(){returnfatherNode;
}publicTreeNode[] getTreeGraphic(){returntreeGraphic;
}public AnalysisTable(Map>first,
Map> follow, Mapmp) {super();this.first =first;this.follow =follow;this.mp =mp;
init();
}private voidinit(){for(String leftNode : mp.keySet()){
stringToInt.put(leftNode,++nodeCntRow);
tableRow.put(nodeCntRow, leftNode);
String[] ri