if(flag==1)/*如果是终结符*/ { if(x=='#') { finish=1;/*结束标记*/ printf(\接受 */ getchar(); getchar(); exit(1); }/*if*/ if(x==ch) { print(); print1(); printf(\匹配\\n\ ch=B[++b];/*下一个输入字符*/ flag=0;/*恢复标记*/ }/*if*/ else/*出错处理*/ { print(); print1(); printf(\出错\\n\输出出错终结符*/ exit(1); }/*else*/ }/*if*/
else/*非终结符处理*/ { for(j=0;j<=4;j++) if(x==v2[j]) { m=j;/*行号*/ break; } for(j=0;j<=5;j++) if(ch==v1[j]) { n=j;/*列号*/ break; } cha=C[m][n]; if(cha.origin!='N')/*判断是否为空*/ { print();
print1(); printf(\输出产生式*/ for(j=0;j
三、实验过程记录:
实验截图:
当输入内容不匹配或输入内容非法时要退出程序,此时若不关闭已经打开的文件可能导致文件内容受到破坏;解决方法是给error()函数设置一个文件指针变量参数FILE* fp,在退出程序之前通过fp关闭文件
四、实验总结:
通过本次实验我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。老师提供的LL(1)分析法的流程图给了我很大的帮助,使得本实验基本思路变得很清晰,用较为简单的算法就能实现,程序的难点是产生式结构体的构造、分析表的构造、解决实验中遇到的问题也花费了一部分时间,我增长了处理关于文件错误的能力
相关推荐: