【编译技术】java实现first集合求解

it2023-06-22  70

输入表达式+换行+起始符 例: 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("}"); } }
最新回复(0)