文档介绍:语法分析报告姓名:李思婕学号:9********** 班级:(1)对输入文法,它能判断是否为LL(1)文法,若是,则转(2);否则报错并终止;(2)输入已知文法,由程序自动生成它的LL(1)分析表;(3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。:(1)读入文法(2)判断正误(3)若无误,判断是否为LL(1)文法(4)若是,构造分析表;(5)由总控算法判断输入符号串是否为该文法的句型。有效? 是是LL(1)文法?结束报错判断句型 是关键部分程序本段截取了处理带有循环左递归产生式的代码。对于带有循环左递归的产生式的处理分为四个步骤:创建一个新的非终结符;产生一个左部为原产生式左部,右部为将原产生式右部去掉导致左递归的未终结符,再在末尾添加新创建的非终结符作为新产生式的右部;产生一个左部为原产生式左部,右部为空的产生式(空集用^表示)产生左部为新创建的非终结符,右部为原产生式除含有左递归之外的其他右部;voidrecur(char*point){/*完整的产生式在point[]中*/intj,m=0,n=3,k; chartemp[20],ch; ch=c();/*得到一个非终结符*/ k=strlen(non_ter); non_ter[k]=ch; non_ter[k+1]='\0'; for(j=0;j<=strlen(point)-1;j++) { if(point[n]==point[0]) {/*如果‘|’后的首符号和左部相同*/ for(j=n+1;j<=strlen(point)-1;j++) { while(point[j]!='|'&&point[j]!='\0') temp[m++]=point[j++]; left[count]=ch; memcpy(right[count],temp,m); right[count][m]=ch; right[count][m+1]='\0'; m=0; count++; if(point[j]=='|') { n=j+1; break; } } } else {/*如果‘|’后的首符号和左部不同*/ left[count]=ch; right[count][0]='^'; right[count][1]='\0'; count++; for(j=n;j<=strlen(point)-1;j++) { if(point[j]!='|') temp[m++]=point[j]; else { left[count]=point[0]; memcpy(right[count],temp,m); right[count][m]=ch; right[count][m+1]='