?? lastvt.java
字號:
package you.test;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class LastVT extends BaseVT {
private Map<String, Set<String>> lastVT = new TreeMap<String, Set<String>>();
// 默認構(gòu)造函數(shù),為lastVT賦初值
public LastVT() {
super();
Iterator<String> it = nonTerminal.iterator();
while (it.hasNext()) {
lastVT.put(it.next(), null);
}
}
/**
*
*/
@SuppressWarnings("unused")
public void init() {
// 非終結(jié)符,文法左部
String key = null;
// 文法右部
String value = null;
// 產(chǎn)生式尾字母
String end1 = null;
// 倒二個字符
String end2 = null;
// 倒三個字符
String end3 = null;
String t = null;
// 將A->....a或A->....aB的產(chǎn)生式
System.out.println("找到所有的A->....a或A->....aB的產(chǎn)生式");
Iterator<String> it = sentence.keySet().iterator();
while (it.hasNext()) {
key = (String) it.next();
// System.out.print(key + "---");
Iterator<String> itValue = sentence.get(key).iterator();
while (itValue.hasNext()) {
// System.out.print(it1.next() + "|");
value = itValue.next();
// 尾字符
end1 = "" + value.charAt(value.length() - 1);
// 重新置為null
end2 = null;
end3 = null;
if (value.length() > 1) {
end2 = "" + value.charAt(value.length() - 2);
}
if (value.length() > 2) {
end3 = "" + value.charAt(value.length() - 3);
t = end1 + end2;
}
// 如果為終結(jié)符,A->....a
if (terminal.contains(end1)) {
System.out.print(key+"->"+value);
insert(key, end1, lastVT);
}
// A->...aT'
else if (end3 != null && nonTerminal.contains(t)
&& terminal.contains(end3)) {
System.out.print(key+"->"+value);
insert(key, end3, lastVT);
} // A->...aB
else if (end2 != null && nonTerminal.contains(end1)
&& terminal.contains(end2)) {
System.out.print(key+"->"+value);
insert(key, end2, lastVT);
}
}
}
}
/**
* 棧操作
*/
@SuppressWarnings("unused")
public void processStack() {
// 棧頂元素
String top = null;
// 非終結(jié)符
String vN = null;
// 終結(jié)符
String vT = null;
// 非終結(jié)符,文法左部
String key = null;
// 文法右部
String value = null;
// 產(chǎn)生式首字母
@SuppressWarnings("unused")
String begin = null;
//
int t = 0;
while (stack.empty() == false) {
top = stack.pop();
// System.out.println(top);
// 解析出VN,VT
System.out.println("彈出棧頂元素:"+top);
t = top.indexOf(",");
vN = top.substring(1, t);
vT = "" + top.charAt(t + 1);
// 查找所有A->.....B的產(chǎn)生式
System.out.println("查找所有A->...."+vN+"的產(chǎn)生式");
Iterator<String> it = sentence.keySet().iterator();
while (it.hasNext()) {
key = (String) it.next();
Iterator<String> itValue = sentence.get(key).iterator();
while (itValue.hasNext()) {
value = itValue.next();
// 若找到A->....B的產(chǎn)生式
if (value.lastIndexOf(vN) == 0) {
System.out.print(key+"->"+value);
insert(key, vT, lastVT);
}
}
}
}
System.out.println("棧空,算法結(jié)束\r\n");
}
/**
* 重寫toString方法
*/
@Override
public String toString() {
StringBuffer result = new StringBuffer();
String key = null;
Set<String> valueSet = null;
@SuppressWarnings("unused")
String value = null;
Iterator<String> itF = lastVT.keySet().iterator();
while (itF.hasNext()) {
key = itF.next();
valueSet = lastVT.get(key);
result.append("LASTVT(" + key + ")={");
if (valueSet != null) {
Iterator<String> itValue = valueSet.iterator();
while (itValue.hasNext()) {
result.append(itValue.next() + ",");
}
result.deleteCharAt(result.length() - 1);
}else{
result.append("空集");
}
result.append("}\r\n");
}
return result.toString();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -