编译原理实验报告 姓名:叶玉虎 班级:计 12 2班 指导老师:王森玉 实验日期:2025/5/1 1实验内容:1。求出每个非终结符得 FIRST 集合2、求出每个产生式右部得 FI RS T 集合3。求出每个非终结符得 Foll o w 集合实验环境: Visual Studio2025实验目得:ﻩ 让同学们掌握FIRST集合与FOLLOW集合得求法实验代码:#include〈stdio、h>#include〈string、h〉#define MAX 50char css[MAX][MAX];//保存所有得产生式int count=0;int cnt=0;struct L{//保存所有得终结符ﻩchar ch;int flag;//1:能推出ε,0:不能,初值:-1int num;char first[MAX];int s;//first得长度ﻩchar follow[MAX];ﻩint l;//follow得长度}l[MAX];//对输入得格式进行控制,并校验输入就是否符合格式int handle(char a[]){int len,i=0,j,k;ﻩlen=strlen(a);while(a[i]!=10)ﻩ{ﻩif(a[i]=='$')ﻩﻩﻩreturn 2;if((' ’==a[i])||(9==a[i]))ﻩ{ﻩﻩi++;ﻩﻩ continue;ﻩﻩ}ﻩif((a[i]>='A’)&&(a[i]〈=’Z’)){ﻩﻩﻩif((a[i+1]!=’-')||(a[i+2]!='>'))ﻩﻩ{ﻩﻩﻩprintf(”产生式格式错误\n");ﻩreturn -1;ﻩ}elseﻩﻩ{ﻩﻩj=i;ﻩﻩﻩk=0;ﻩﻩﻩwhile((a[j]!=’ ')&&(a[j]!=9)&&(a[j]!='$')&&(a[j]!=10))ﻩﻩ{ﻩﻩif(a[j]==’|’)ﻩﻩﻩ{ﻩﻩﻩﻩﻩcss[count][k]='\0’;ﻩﻩﻩcount++;ﻩﻩﻩif((a[j+1]==' ’)||(a[j]==9)||(a[j]=='$’)||(a[j]==10))ﻩﻩﻩﻩ{ﻩﻩprintf("产生式格式错误\n");ﻩﻩﻩreturn 0;ﻩ}ﻩcss[count][0]=a[i];ﻩﻩﻩﻩcss[count][1]=a[i+1];ﻩﻩ css[count][2]=a[i+2];ﻩﻩﻩﻩk=3;ﻩﻩﻩﻩj++;ﻩﻩﻩcontinue;ﻩﻩﻩﻩ}ﻩﻩﻩcss[count][k]=a[j];ﻩﻩﻩ k++;ﻩﻩj++;ﻩ}ﻩﻩcss[count][k]=’\0';ﻩﻩﻩ i=j;ﻩﻩcount++;ﻩﻩ}ﻩ}ﻩﻩelseﻩ{ﻩﻩﻩprintf("产生式格式错误\n");ﻩﻩﻩreturn -1;ﻩ}ﻩ}ﻩreturn 0;}//从键盘获得输入int input(){char a[MAX*MAX];ﻩint v;printf("输入产生式,产生式之间以空格回车或Tab键分隔,并以$键结束。\n");printf(”用表示虚拟符号ε,终结符用大写字母表示,其她字符表示非终结符\n”);ﻩwhile(1){...