输入表达式+换行+起始符
例:
E->T E’
E’->+ T E’|e
T->F T’
T’->* F T’|e
F->( E )|i d
E
即输出E的first集合
代码:
import java.util.*;
public class first {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
List<String> ins = new ArrayList<>();
List<String> result = new ArrayList<>();
Queue<String> queue = new LinkedList<String>();
String start = new String();
String s = null;
while(!(s = scanner.nextLine()).equals("")){
ins.add(s);
}
start = scanner.nextLine();
System.out.println("\n运算过程:");
System.out.println(start+"被压入");
queue.offer(start);
while(!(queue.isEmpty())){
String now = queue.poll();
System.out.println(now+"被弹出");
for(String l : ins){
String [] str = l.split("->");
if(str[0].equals(now)){
String [] right = str[1].split("\\|");
for(String r : right){
String [] chara = r.split(" ");
if(chara[0].contains("'")){
queue.offer(chara[0]);
System.out.println(chara[0]+"被压入");
}
else if(chara[0].charAt(0)>=65 && chara[0].charAt(0)<=90){
queue.offer(chara[0]);
System.out.println(chara[0]+"被压入");
}
else{
result.add(chara[0]);
System.out.println(chara[0]+"被加到结果集中");
}
}
}
}
}
System.out.print("\n最终结果集:{ ");
for(String re : result){
System.out.print(re+" ");
}
System.out.print("}");
}
}